2016-06-16 6 views
3

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?

+2

explizit Versuchen '# PropList' vor dem' IF' Erstellen Sie dann eine 'INSERT INTO #PropList SELECT tun ...'. –

+0

@ChrisPickford: Das hat für mich funktioniert. Ich bin nur verwirrt, warum es nicht so funktioniert –

+0

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

Antwort

Verwandte Themen