我真的对这个感到困惑!!我确信它很简单,但实在无法理解!!
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。
由于 杰森
答案 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