IF ELSE语句中的SQL Alter表

时间:2016-01-26 10:36:40

标签: sql sql-server

我有以下sql:

DECLARE @Variable1 VARCHAR(10)

SET @Variable1 = 'YES

IF @Variable1 = 'YES'

    BEGIN
            alter table #Tempfile add Newcolumn varchar(10)
        UPDATE #Tempfile
            SET Newcolumn ='J'
            FROM #Tempfile
            INNER JOIN OtherTable
                 ON #Tempfile.SPLPKD = OtherTable.SPLPKD 
                  AND #Tempfile.SPLHNR = OtherTable.SPLHNR 
            PRINT('Variable was Yes')
        END
    ELSE 
        BEGIN
            PRINT('Variable was NO!!')
        END 

现在,只要@variable1 YES正在按预期进行即可。 但是当@Variable1NO时,我收到以下错误消息:

  

消息207,级别16,状态1,行201无效的列名称“Newcolumn”。

对我而言看起来很奇怪,因为我认为IF会阻止检查该语句中的代码。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

当您开始执行脚本时,您的额外列不存在,正在验证UPDATE并确定该列不存在。使用嵌入式sql可以避免此检查:

IF @Variable1 = 'YES'
BEGIN
    alter table #Tempfile add Newcolumn varchar(10)
    EXECUTE('UPDATE #Tempfile
        SET Newcolumn =''J''
        FROM #Tempfile
        INNER JOIN OtherTable
                ON #Tempfile.SPLPKD = OtherTable.SPLPKD 
                AND #Tempfile.SPLHNR = OtherTable.SPLHNR 
        PRINT(''Variable was Yes'')')
    END
ELSE 
    BEGIN
        PRINT('Variable was NO!!')
    END