更新已在同一脚本中添加的列

时间:2018-06-07 02:06:11

标签: sql sql-server

我有一个需要添加列的部署脚本,然后用一些数据填充它。我检查列是否存在 - 如果它没有添加它,并尝试更改该值。

    IF NOT EXISTS (SELECT * FROM   sys.columns WHERE  object_id = OBJECT_ID(N'[dbo].[MyTable]') AND name = 'MyColumn')
    BEGIN

        ALTER TABLE [dbo].MyTable
        ADD MyColumn INT NULL

...

       UPDATE MyTable SET MyColumn = MyValue

END

然而,脚本失败(在预编译?),因为它说MyColumn不存在。

我能想到解决这个问题的唯一方法是将UPDATE语句更改为动态SQL,并以这种方式执行EXEC。

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

由于编译,这很棘手。一种解决方案是动态SQL:

exec sp_executesql 'UPDATE MyTable SET MyColumn = MyValue';

如果采用此路径,则应将值作为参数传递。

答案 1 :(得分:0)

您应该将更新声明置于 IF NOT EXISTS 条件的一侧。

原因:如果您的表中已经存在列,则它将退出该条件并执行update语句,否则它将添加该列,然后执行更新。看看下面的代码:

IF NOT EXISTS (SELECT * FROM   sys.columns WHERE  object_id = 
OBJECT_ID(N'[dbo].[MyTable]') AND name = 'MyColumn')
BEGIN

    ALTER TABLE [dbo].MyTable
    ADD MyColumn INT NULL

END

GO

UPDATE MyTable SET MyColumn = 1
GO