如何让临时表运行多次

时间:2016-03-30 20:50:06

标签: sql-server temp-tables

我正在使用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”的对象。

谢谢!

1 个答案:

答案 0 :(得分:0)

当您编写... INTO#test1时,您将根据select语句的内容创建表。您需要1)在查询结束时删除临时表,2)检查它们是否存在于前端,如果存在则删除它们,3)两者。

您已经在检查#headcount,但在开头删除#final和#test1。我不知道你在哪里声明#headcount作为一张桌子?