2016-03-30 70 views
-1

我正在使用MS SQL Server。我目前正在研究拉人數的查詢。在這個過程中,我創建臨時表,但注意到我只能運行一次查詢。如果我在更改後再次嘗試運行它,它會給我'數據庫中已經有一個名爲'#Test1'的對象。'如何獲取臨時表以運行多個時間

我的SQL是這樣的:

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 

最後Select語句是非臨時表查詢的開始。我可以在代碼中進行/寫入以便能夠連續運行多次?此外,我收到的錯誤:

Msg 2714,Level 16,State 6,Line 4 數據庫中已有一個名爲'#Test1'的對象。

謝謝!

+0

嗯......你的第一次檢查是丟棄#Test1但只有#Headcount存在。也許這就是問題所在?你對#Final1再次做同樣的事情。 –

+0

只是一個建議......你應該按專欄名稱而不是序號排列。如果更改查詢,則可能會得到不正確的數據,因爲順序是錯誤的。 –

+0

感謝您的建議!是的,這是問題的一部分。 –

回答

0

當您編寫... INTO#test1時,您將基於select語句的內容創建表。您需要1)在查詢結束時刪除臨時表,2)檢查存在於前端的臨時表,如果它們存在,則刪除它們,3)兩者。

您已經在檢查#headcount,但在開始時刪除#final和#test1。我沒有看到你在哪裏宣佈#headcount作爲表?

+0

這基本上是問題。對於SQL來說還是新手。謝謝您的幫助! –