カーソルループ内で次のSQLスニペットを実行しようとすると、
set @cmd = N'exec sp_rename ' + @test + N',' +
RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''
次のメッセージが表示されます。
メッセージ15248、レベル11、状態1、プロシージャsp_rename、行213
パラメータ@objname
があいまいであるか、要求された@objtype
(COLUMN)が間違っています。
何が問題で、どうすれば修正できますか?列名を角かっこで囲ん[]
でみました""
が、検索結果の一部のように二重引用符で囲んでみました。
編集1-
これがスクリプト全体です。テーブル名を名前変更spに渡すにはどうすればよいですか?列名は多くのテーブルの1つにあるため、その方法がわかりません。
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
編集2-スクリプトは、名前がパターンに一致する列の名前を変更するように設計されています。この場合は、「pct」プレフィックスが付いています。列は、データベース内のさまざまなテーブルにあります。すべてのテーブル名には「TestData」というプレフィックスが付いています。