2017-04-25 29 views
0

Hallo Ich habe eine temporäre Tabelle, in der ich versuche, Datensätze basierend auf einer WHERE-Bedingung einzufügen, aber es wirft einen Fehler, der bereits vorhanden ist. Ich habe versucht, die Namen zu ändern, aber das ist nicht das Problem, da die temporären Tabellen gelöscht werden, wenn die Sitzung endet.Temp-Tabelle existiert bereits

Ich denke, ich schreibe die Abfrage richtig.

SELECT [Name] 
     INTO #TEMP_REJECT 
     FROM #TEMP_VALIDATION 
     WHERE Name = @Name 

Ich versuche #TEMP_REJECT VON #TEMP_VALIDATION

Fehlermeldung

"Es ist bereits ein Objekt mit dem Namen '#TEMP_REJECT' in der Datenbank." Einfügen

Bitte vorschlagen.

Vielen Dank für Ihre Hilfe. R

+0

Können Sie uns die genaue Fehlermeldung geben Sie stoßen? Gib uns auch die Tabellendefinitionen. – Hybris95

+1

Hallo Ich habe die Frage mit der Fehlermeldung 'Es gibt bereits ein Objekt mit dem Namen' #TEMP_REJECT 'in der Datenbank aktualisiert.' – BRDroid

+0

Off-Thema, könnte es sich lohnen, Tabellenvariablen stattdessen in Betracht zu ziehen - http: // stackoverflow.com/questions/11857789/Wenn-sollte-ich-verwende-eine-Tabelle-Variable-vs-temporäre-Tabelle-in-SQL-Server – user5226582

Antwort

2

SQL Server teilt Ihnen nicht mit, dass eine Tabelle nicht existiert, wenn dies nicht der Fall ist.

Ich schlage vor, dass Sie

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

vor Ihrer select-Anweisung hinzufügen. Dies garantiert, dass die temporäre Tabelle nicht existiert, wenn die Auswahl ausgeführt wird.

So Ihre Aussage wird

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

SELECT [Name] 
      INTO #TEMP_REJECT 
      FROM #TEMP_VALIDATION 
      WHERE Name = @Name 
+0

Vielen Dank, das hat es gelöst – BRDroid

2

Diese Antwort wird Ihnen helfen: https://stackoverflow.com/a/8560644/3635715

kurz zu machen: SELECT INTO schafft Tabelle dann Datensätze einfügen. INSERT INTO nur die Datensätze einfügen.

Also in Ihrem Fall, da #TEMP_REJECT bereits existiert, wird SELECT INTO abgelehnt, weil es wieder die Tabelle nicht erstellt werden kann, so dass Sie INSERT INTO nach dem ersten SELECT INTO verwenden.

IF OBJECT_ID('tempdb..#TEMP_REJECT') IS NOT NULL 
BEGIN 
    INSERT INTO #TEMP_REJECT 
    SELECT [Name] 
    FROM #TEMP_VALIDATION 
    WHERE Name = @Name 
END 
ELSE 
BEGIN 
    SELECT [Name] 
    INTO #TEMP_REJECT 
    FROM #TEMP_VALIDATION 
    WHERE Name = @Name 
END 

Referenzen:
INTO Clause
INSERT Clause

1

vor

Einfügen Überprüfung Versuchen wenn object_id ('tempdb .. # TEMP_REJECT') ist drop table #TEMP_REJECT nicht null

SELECT [Name] 
     INTO #TEMP_REJECT 
     FROM #TEMP_VALIDATION 
     WHERE Name = @Name 

wenn SQL sagt, Es gibt eine temporäre Tabelle. Vor dem Einfügen muss eine Tabelle vorhanden sein.

Verwandte Themen