Quando provo a eseguire il seguente frammento SQL all'interno di un ciclo del cursore,
set @cmd = N'exec sp_rename ' + @test + N',' +
RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''
Ricevo il seguente messaggio,
Msg 15248, livello 11, stato 1, procedura sp_rename, riga 213
Il parametro@objname
è ambiguo o la richiesta@objtype
(COLUMN) è errata.
Cosa c'è che non va e come lo risolvo? Ho provato a racchiudere il nome della colonna tra parentesi []
e virgolette doppie ""
come alcuni dei risultati di ricerca suggeriti.
Modifica 1 -
Ecco l'intero copione. Come faccio a passare il nome della tabella a rinominare sp? Non sono sicuro di come farlo poiché i nomi delle colonne sono in una delle tante tabelle.
BEGIN TRANSACTION
declare @cnt int
declare @test nvarchar(128)
declare @cmd nvarchar(500)
declare Tests cursor for
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'pct%' AND TABLE_NAME LIKE 'TestData%'
open Tests
fetch next from Tests into @test
while @@fetch_status = 0
BEGIN
set @cmd = N'exec sp_rename ' + @test + N',' + RIGHT(@test,LEN(@test)-3) + '_Pct' + N', column'
print @cmd
EXEC sp_executeSQL @cmd
fetch next from Tests into @test
END
close Tests
deallocate Tests
ROLLBACK TRANSACTION
--COMMIT TRANSACTION
Modifica 2 - Lo script è progettato per rinominare le colonne i cui nomi corrispondono a un modello, in questo caso con un prefisso "pct". Le colonne si trovano in una varietà di tabelle all'interno del database. Tutti i nomi di tabella hanno il prefisso "TestData".