重命名列不允许批量使用它

时间:2016-09-27 15:28:05

标签: sql sql-server tsql

我需要做一些更新并重命名一个列,如果它有旧名称,所以我尝试这样做:

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 个答案:

答案 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在批处理的编译阶段遇到了未知的列错误。