【问题标题】:How To Get Temp Table to Run Multiple Time如何让临时表运行多次
【发布时间】: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 是错误的。
  • 感谢您的建议!是的,这是问题的一部分。

标签: sql-server temp-tables


【解决方案1】:

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

您已经在检查#headcount,但在开头删除了#final 和#test1。我没有看到您在哪里将 #headcount 声明为表格?

【讨论】:

  • 这基本上就是问题所在。 SQL 还是新手。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多