【发布时间】:2016-07-19 01:57:35
【问题描述】:
我正在使用 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 语句是非临时表查询的开始。我可以做什么/在代码中写什么才能连续运行多次?另外,我收到的错误:
消息 2714,第 16 级,状态 6,第 4 行 数据库中已经有一个名为“#Test1”的对象。
谢谢!
【问题讨论】:
-
嗯...您的第一个检查正在删除#Test1,但前提是#Headcount 存在。也许这就是问题所在?你为#Final1 再次做同样的事情。
-
只是一个建议......你真的应该按列名而不是序数位置排序。如果您更改查询,您可能会得到不正确的数据,因为 order by 是错误的。
-
感谢您的建议!是的,这是问题的一部分。