Ich habe den folgenden SQL-Code:Seltsam "Es ist bereits ein Objekt in der Datenbank vorhanden." Fehler
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
Unabhängig vom Wert von @propList
, dieser Code stoppt immer an der angegebenen Zeile mit diesem Fehler:
There is already an object named '#PropList' in the database.
Meine Erwartung war, dass nur einer von Die beiden IF-Blöcke werden ausgeführt, daher sollte nur ein Versuch unternommen werden, die Tabelle mit der SELECT... INTO
-Anweisung zu erstellen. Warum scheitert das?
explizit Versuchen '# PropList' vor dem' IF' Erstellen Sie dann eine 'INSERT INTO #PropList SELECT tun ...'. –
@ChrisPickford: Das hat für mich funktioniert. Ich bin nur verwirrt, warum es nicht so funktioniert –
Dieser Fehler wird beim Parsen des Codes (und vor der Ausführung) generiert und Code-Parsing führt keine Kontrollflussanweisungen aus (wie Sie es erwarten würden). Verwenden Sie @Chris Pickford Antwort, um das Problem zu umgehen. – Alex