Wenn ich versuche, das folgende SQL-Snippet in einer Cursorschleife auszuführen,
set @cmd = N'exec sp_rename ' + @test + N',' +
RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''
Ich erhalte die folgende Nachricht:
Nachricht 15248, Ebene 11, Status 1, Prozedur sp_rename, Zeile 213
Entweder ist der Parameter@objname
mehrdeutig oder der beanspruchte@objtype
(COLUMN) ist falsch.
Was ist falsch und wie behebe ich es? Ich habe versucht, den Spaltennamen in Klammern zu setzen []
und doppelte Anführungszeichen zu setzen, ""
wie einige der vorgeschlagenen Suchergebnisse.
Bearbeiten 1 -
Hier ist das gesamte Skript. Wie übergebe ich den Tabellennamen an die Umbenennung 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 verschiedenen Tabellen in der Datenbank vor. Allen Tabellennamen wird "TestData" vorangestellt.
@test
hat die Form vontable.column
oderschema.table.column
, nicht wahr?LEFT
. Könnten Sie bitte das Skript ein wenig erweitern, indem Sie set @test = ... hinzufügen?Antworten:
Hier ist eine leicht modifizierte Version. Änderungen werden als Codekommentar vermerkt.
quelle
@var1,
@ var2