在我的TSQL脚本中,我有一个IF THEN ELSE结构,用于检查列是否已存在 如果没有,它会创建列并更新它。
IF NOT EXISTS(
SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'tableName' AND COLUMN_NAME = 'columnName'))
BEGIN
BEGIN TRANSACTION
ALTER TABLE tableName
ADD columnName int NULL
COMMIT
BEGIN TRANSACTION
update tableName
set columnName = [something]
from
[subquery]
COMMIT
END
这不起作用,因为提交后列不存在 为什么不提交COMMIT?
答案 0 :(得分:2)
我猜你在解析阶段遇到错误,而不是在执行阶段。 COMMIT确实会提交,但是查询解析器不像查询执行引擎那么聪明,并且所有解析器都知道它可以看到你引用tableName.columnName
,其中< em> parse 时间不存在。
将整个update
语句换成EXEC
:
EXEC ('
update tableName
set columnName = [something]
from
[subquery]
')
你应该没事。请注意,您需要在'
的{{1}}内加倍'
。