SQL Server 2005 IF ... ELSE执行错误

时间:2015-10-28 17:39:31

标签: sql-server

我正在使用SQL Server 2005 - 9.00.5266.00(X64)

我不确定在SQL下面我错过了什么。有人能找出问题所在吗?

在这里 -

create table my_temp
(
    col1 varchar(10)
)

--===================== the first block is executed
IF NOT  EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID(N'my_temp') and Name = 'col2')
    begin
        select 'alter table my_temp add col2 bit'
        --alter table my_temp add col2 bit
    end    
else
    begin
        select 'update my_temp set col2 = null'
        --update my_temp set col2 = null
    end

--====================== the second block is executed

IF NOT  EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID(N'my_temp') and Name = 'col2')
    begin
        --select 'alter table my_temp add col2 bit'
        alter table my_temp add col2 bit
    end    
else
    begin
        --select 'update my_temp set col2 = null'
        update my_temp set col2 = null
    end

我很困惑,相同的IF语句执行不同的代码块。

1 个答案:

答案 0 :(得分:0)

与批次相关的问题 如果您执行了这样的代码,那么您可以使用GO语句

分隔批处理
 create table my_temp
(
    col1 varchar(10)
)
GO
-- rest of script

然后每次执行ELSE部分时都会运行查询,因为表已创建

如果你第一次用GO语句执行整个脚本,那么IF部分将被执行,因为那时表格不会创建

将QUERY表创建与其他代码分开后,始终会ELSE部分执行