2016-03-30 4 views
-1

Ich benutze MS SQL Server. Ich arbeite gerade an einer Abfrage für das Ziehen von Personal. In diesem Prozess erstelle ich temporäre Tabellen, habe aber festgestellt, dass ich die Abfrage nur einmal ausführen kann. Wenn ich versuche, es erneut auszuführen, nachdem ich Änderungen vorgenommen habe, gibt es mir die 'Es gibt bereits ein Objekt mit dem Namen' # Test1 'in der Datenbank.'Wie Temp-Tabelle mehrere Male ausgeführt wird

My SQL sieht wie folgt aus:

SET NOCOUNT ON SET ANSI_WARNINGS OFF  
IF OBJECT_ID('Tempdb..#Headcount') IS NOT NULL 
Drop Table #Test1 
Select Coalesce(Enddate,GETDATE()) as EndDate1,FirstName,LastName,EmployeeID,CostCenter,JobCode, CompanyCode 
Into #Test1 
from EmployeeDM.dbo.vEmployeeJobReporting EJ 
--Group By FirstName,LastName,EmployeeID,CostCenter 
Order by 1 

IF OBJECT_ID('Tempdb..#Headcount') IS NOT NULL 
Drop Table #Final1 
Select max(EndDate1) as Date1, FirstName,LastName,EmployeeID,CostCenter,JobCode, CompanyCode 
Into #Final1 
From #Test1 
Group by FirstName,LastName,EmployeeID,CostCenter,JobCode, CompanyCode 
Order by 1 

SELECT F.CostCenter,F.FirstName,F.LastName, F.Date1, F.CompanyCode, F.JobCode,F.EmployeeID,(t3.Day_of_Month-t2.Day_of_Month+1)*1.0/t4.Day_of_Month as Headcount, 

     Case 

Die letzte Anweisung Select ist der Beginn der nicht-temporäre Tabelle Abfrage. Was kann ich im Code tun/schreiben, um mehrere Male in Folge laufen zu können? Auch der Fehler, den ich erhalte:

Msg 2714, Ebene 16, Status 6, Zeile 4 Es gibt bereits ein Objekt namens "# Test1" in der Datenbank.

Danke!

+0

Nun ... Ihre allererste Prüfung löscht # Test1 aber nur wenn #Headcount existiert. vielleicht ist das das Problem ?? Sie machen das gleiche wieder für # Final1. –

+0

Und nur ein Vorschlag ... Sie sollten wirklich nach Spaltennamen statt Ordnungszahlen sortieren. Wenn Sie Ihre Abfrage ändern, erhalten Sie möglicherweise falsche Daten, weil die Reihenfolge falsch ist. –

+0

Schätzen Sie den Vorschlag! Ja, das war Teil des Problems. –

Antwort

0

Wenn Sie ... INTO # test1 schreiben, erstellen Sie die Tabelle basierend auf dem Inhalt der SELECT-Anweisung. Sie müssen entweder 1) die temporären Tabellen am Ende Ihrer Anfrage löschen, 2) nach ihnen am Frontend suchen und sie löschen, wenn sie existieren, 3) beides.

Sie suchen bereits nach #headcount, aber legen am Anfang #final und # test1 ab. Ich sehe nicht, wo Sie #headcount als Tabelle deklarieren?

+0

Das war im Grunde das Problem. Noch neu in SQL. Danke für die Hilfe! –

Verwandte Themen