T-SQL IF语句解释

时间:2012-02-09 21:18:24

标签: sql sql-server tsql

我真的对这个感到困惑!!我确信它很简单,但实在无法理解!!

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。

由于 杰森

2 个答案:

答案 0 :(得分:2)

您是通过链接服务器运行的吗? 您没有删除之前运行的那个。

尝试在IF语句之前创建#tmp表:

CREATE TABLE #tmp(fields...)

DECLARE @jobid INT = 100
IF (@JobID >= 0)
BEGIN 
  INSERT #tmp
  SELECT * FROM Persons 
end
ELSE
BEGIN
  INSERT #Tmp
  SELECT * FROM Persons1 
end

删除前一个

IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
  EXEC('DROP TABLE #tmp')
GO

DECLARE @jobid INT = 100
   IF (@JobID >= 0)
 BEGIN 
SELECT * into #tmp FROM Persons 
 end
    ELSE
 BEGIN
SELECT * into #tmp FROM Persons1 
 end

答案 1 :(得分:2)

以前的查询运行中可能已在#tmp中创建了

tempDB。如果您在该块之前的查询中没有使用#tmp,那么您可以在该代码块之前执行以下操作,以确保它始终可以使用:

IF OBJECT_ID('tempDB..#tmp') IS NOT NULL
    DROP TABLE #tmp