奇怪“数据库中已有一个对象。”错误

时间:2016-06-16 10:13:09

标签: sql-server tsql

我有以下SQL代码:

IF OBJECT_ID( 'tempdb..#PropList') IS NOT NULL
  DROP TABLE #PropList

DECLARE @Split CHAR(1), @propList NVARCHAR(MAX), @PropListXml XML
SET @Split = ','
SET @propList = 'NAME,DESCRIPTION'
-- SET @propList = ''

IF (@propList IS NOT NULL AND @propList != '')
  BEGIN
    SET @PropListXml = CONVERT(XML,'<root><s>' + REPLACE(@propList, @Split, '</s><s>') + '</s></root>')

    SELECT SystemName = T.c.VALUE('.','nvarchar(36)')
    INTO #PropList
    FROM @PropListXml.nodes('/root/s') T(c)
  END
ELSE
  BEGIN
    SELECT SystemName
    INTO #PropList -- Stops here
    FROM tblProperty
  END

SELECT * FROM #PropList

无论@propList的值如何,此代码始终在指定的行停止,并显示以下错误:

  

数据库中已经有一个名为'#PropList'的对象。

我的期望是只执行了两个IF块中的一个,因此应该只有一次尝试使用SELECT... INTO语句创建表。为什么这会失败?

1 个答案:

答案 0 :(得分:2)

根据评论,您需要在#temp声明之前明确定义IF表,然后更改

SELECT ... INTO #temp

INSERT INTO #temp SELECT ...

这是因为当SQL Server验证查询时,它会忽略任何控制流语句。有关详细信息,请参阅以下SO问题:

T-Sql appears to be evaluating "If" statement even when the condition is not true