我真的很困惑这个!我相信这很简单,但真的不知道!T-SQL IF语句解释
DECLARE @jobid INT = 100
IF (@JobID >= 0)
BEGIN
SELECT * into #tmp FROM Persons
end
ELSE
BEGIN
SELECT * into #tmp FROM Persons1
end
它给出了#tmp
表已经存在的错误!为什么它会验证这两个陈述!
当然,我的原始查询是巨大的,做得更多,但这是一个示例来说明我的错误。
有人可以解释一下吗?
#tmp
表不存在,即使您尝试删除它或更改名称,引擎仍然会验证这两个语句!
我正在使用2008 R2。
感谢 杰森
,因为你还没有降到' #tmp'来自上一次运行? – 2012-02-09 21:20:06
我很肯定你在'ELSE'之后不需要'BEGIN'。另外,根据MSDN ELSE需要在END之后出现吗? http://msdn.microsoft.com/en-us/library/ms182717.aspx – 2012-02-09 21:23:09
@ p.campbell - 不,那不是它。如果您尝试了代码,您会注意到它是引发错误而不是运行时的解析器。它们之间的错误信息几乎相同。解析器错误会给你'Msg 2714,Level 16,State 1',运行时错误会给你'Msg 2714,Level 16,State 6'。 – 2012-02-10 07:00:28