【问题标题】:How to insert result from a cursor into a tempTable如何将游标的结果插入到临时表中
【发布时间】:2016-02-22 16:00:42
【问题描述】:

我有大约 60 个要查询的数据库具有相同的表;但是,我希望将查询的结果插入到临时表中,以便可以使用存储在该临时表中的结果创建格式正确的报告。 我该如何做到这一点? 下面是我的查询,它遍历每个数据库并运行查询以选择所有活动订单:

DECLARE @db_name Varchar(100)

DECLARE @SQL Varchar(3000)

DECLARE c_db_names CURSOR FOR
SELECT name 
FROM master.dbo.sysdatabases
WHERE name NOT IN('master','AdventureWorks2008','TestDB','Development','Northwind') --might need to exclude more databases

OPEN c_db_names

FETCH c_db_names INTO @db_name

WHILE @@Fetch_Status = 0
BEGIN   

SET @SQL = 'SELECT OrderID, OrderStatus, OrderDetails, FulfillmentDate, ShippingDate , AddDate from 
       '+ @db_name +'.dbo.ActiveOrders inner join '+ @db_name +'.dbo.FinalShipmentNumbers on '+ @db_name +'.dbo.ActiveOrders.OrderDetails = 
       '+ @db_name +'.dbo.FinalShipmentNumbers.OrderID where addDate between ''1/30/2016'' and ''2/26/2016'''

SELECT @db_name As Client_Name
EXEC(@SQL)      
FETCH c_db_names INTO @db_name
END

CLOSE c_db_names
DEALLOCATE c_db_names

【问题讨论】:

  • 也许有插入语句?
  • 在我提供的上述查询中添加到哪里?我读过 SELECT * INTO tempTable 应该可以工作,但是如何使用这个呢?
  • 选择 INTO 仅在目标表不存在时有效。显然,在游标中,它将第二次存在,因此它会失败。我认为您对此想得太多了,并且使事情变得比需要的更复杂。创建一个临时表并将插入添加到 #YourTable 中,作为动态 sql 的一部分,在 select 语句之前。您的动态 sql 的上下文将始终是您开始的数据库。
  • 在这个查询中运行了两条 SELECT 语句,第一个是返回客户端名称以便我知道结果属于哪个数据库,第二个是 EXEC(@SQL) 循环每个数据库的表。如何插入两者?
  • 对……正如我所说。将插入内容放入您的动态 sql 中。

标签: sql-server cursor temp-tables


【解决方案1】:

这是基本语法。

SET @SQL = 'INSERT #YourTempTableHere (ColumnList)
SELECT OrderID, OrderStatus, OrderDetails, FulfillmentDate, ShippingDate , AddDate from 
       '+ @db_name +'.dbo.ActiveOrders inner join '+ @db_name +'.dbo.FinalShipmentNumbers on '+ @db_name +'.dbo.ActiveOrders.OrderDetails = 
       '+ @db_name +'.dbo.FinalShipmentNumbers.OrderID where addDate between ''1/30/2016'' and ''2/26/2016'''

【讨论】:

  • @Jesus - 感谢您的编辑,但 INTO 实际上是一个可选关键字。因此,包含或排除它既不正确也不错误。 msdn.microsoft.com/en-us/library/ms174335.aspx
  • 我很抱歉。我坚信这是必需的。
  • @JesúsLópez 完全不需要道歉。只是澄清它不是必需的。 :)
猜你喜欢
  • 2019-09-02
  • 1970-01-01
  • 2015-11-12
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
相关资源
最近更新 更多