Wie rufe ich mehrere Spalten zur Verwendung in einer Cursor-Schleife ab?

Wenn ich versuche, das folgende SQL-Snippet in einer Cursor-Schleife auszuführen,

set @cmd = N'exec sp_rename ' + @test + N',' +
           RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''

Ich erhalte die folgende Nachricht:

Meldung 15248, Ebene 11, Status 1, Prozedur sp_rename, Zeile 213
Entweder der Parameter@objname ist mehrdeutig oder die behauptete@objtype (COLUMN) ist falsch.

Was ist falsch und wie behebe ich das? Ich habe versucht, den Spaltennamen in Klammern zu setzen[]und doppelte Anführungszeichen"" wie einige der Suchergebnisse vorgeschlagen.

Bearbeiten 1 -

Hier ist das gesamte Skript. Wie übergebe ich den Tabellennamen an den Rename SP? Ich bin mir nicht sicher, wie ich das machen soll, da sich die Spaltennamen in einer von vielen Tabellen befinden.

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

Bearbeiten 2 - Das Skript dient zum Umbenennen von Spalten, deren Namen mit einem Muster übereinstimmen, in diesem Fall mit dem Präfix "pct". Die Spalten kommen in einer Vielzahl von Tabellen in der Datenbank vor. Allen Tabellennamen wird "TestData" vorangestellt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage