更新已添加到表的列

时间:2014-07-25 18:48:18

标签: sql sql-server sql-update

假设我们有table1并且我想在此表中添加名为column1的列。之后更新column1的值。请注意我说的所有内容都发生在IF块中。如何在没有任何错误的情况下更新column1值?

IF NOT EXISTS (
  SELECT * 
  FROM   sys.columns 
  WHERE  object_id = OBJECT_ID(N'[dbo].[table1]') 
         AND name = 'column1'
)
BEGIN
    ALTER TABLE table1
    ADD column1 BIT NULL

    UPDATE table1 SET table1.column1=0
END

错误是:

Msg 207, Level 16, State 1, Line 245
Invalid column name 'column1'.

1 个答案:

答案 0 :(得分:3)

您需要为此使用动态SQL:

BEGIN
    DECLARE @sql NVARCHAR(MAX) = 'ALTER TABLE factorOrder ADD column1 BIT NULL';
    EXEC sp_executesql @sql;

    SET @sql = 'UPDATE table1 SET column1 = 0';
    EXEC sp_executesql @sql;
END;

问题是编译时与执行时问题。在编译时,SQL解释器检查所有表和列引用是否有效。当然,它们不是这种情况,因为没有创建适当的列。这是您必须使用动态SQL的时候。

此外,您可以直接在语句中使用exec()。但是,学习使用sp_executesql是个好主意,因为这样可以将参数传入和传出SQL语句。