我有以下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
正在按预期进行即可。
但是当@Variable1
为NO
时,我收到以下错误消息:
消息207,级别16,状态1,行201无效的列名称“Newcolumn”。
对我而言看起来很奇怪,因为我认为IF
会阻止检查该语句中的代码。
我在这里做错了什么?
答案 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