我有以下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
语句创建表。为什么这会失败?
答案 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