2016-09-27 10 views
0

でそれを使用することはできません。私はそれが古い名前を持っている場合、いくつかのアップデートを行うと、列の名前を変更する必要があるので、このようにやろうとしています:名の変更カラムはバッチ

GO 
IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'NewColumn' AND OBJECT_ID = OBJECT_ID(N'Potatoes')) 
BEGIN 
    UPDATE Potatoes SET OldColumn = 4 WHERE SomeColumn = 1 
    EXEC SP_RENAME 'dbo.Potatoes.OldColumn', 'NewColumn', 'COLUMN';  
END 
GO 

スクリプトは細かい初めての作品、再度実行されている間に、enterpreterはOldColumnという名前の列を見つけることができず、エラーを返します。列を使用して単一のバッチで名前を変更するにはどうすればよいですか?

答えて

1

私は、動的SQLがあなたの問題を解決すると思います:

GO 
IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'NewColumn' AND OBJECT_ID = OBJECT_ID(N'Potatoes')) 
BEGIN 
    EXEC sp_executesql N'UPDATE Potatoes SET OldColumn = 4 WHERE SomeColumn = 1'; 
    EXEC SP_RENAME 'dbo.Potatoes.OldColumn', 'NewColumn', 'COLUMN';  
END 
GO 

このコンパイル時の問題、UPDATEはバッチのコンパイルフェーズ中に不明な列エラーを取得しているため。

+0

はい、実行中の文字列は他に見つからない場合の方法です。私は 'sp_executesql'についても考えました。 – FLCL

+0

また、 'EXEC '...''だけでは、不正な構文エラー – FLCL

+0

@FLCLが発生します。 。 。ああ、かっこ、一気に。 –

関連する問題