我需要做一些更新并重命名一个列,如果它有旧名称,所以我尝试这样做:
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
的列并返回错误。如何使用列并在一个批处理中重命名?
答案 0 :(得分: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
在批处理的编译阶段遇到了未知的列错误。