假设我们有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'.
答案 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语句。