IF内的交易然后ELSE不提交

时间:2010-04-26 13:36:59

标签: sql transactions

在我的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?

1 个答案:

答案 0 :(得分:2)

我猜你在解析阶段遇到错误,而不是在执行阶段。 COMMIT确实会提交,但是查询解析器不像查询执行引擎那么聪明,并且所有解析器都知道它可以看到你引用tableName.columnName,其中< em> parse 时间不存在。

将整个update语句换成EXEC

EXEC ('
        update tableName
        set columnName = [something]
        from 
            [subquery]
')

你应该没事。请注意,您需要在'的{​​{1}}内加倍'