首页 / SQL Server / 正文

[SQL Server]SQL Server中怎样将从存储过程(stored procedure)中查询出来的结果集写入一个临时表

7952 发布于: 2018-01-04 读完约需5分钟

问题描述

SQL Server中怎样将从存储过程(stored procedure)中查询出来的结果集写入一个临时表,这里所说的从存储过程中查询的大致意思是:

SELECT * INTO [temp table] FROM [stored procedure]

还不是

SELECT * INTO [temp table] FROM [table]

像这样的查询是会报错的:

select *
into tmpBusLine
from
exec getBusinessLineHistory '2016-01-01'

方案一、使用 OPENROWSET

CREATE PROC getBusinessLineHistory
AS
BEGIN
    SELECT * FROM sys.databases
END
GO

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

SELECT * INTO #MyTempTable FROM OPENROWSET('SQLNCLI', 'Server=(local)\SQL2008;Trusted_Connection=yes;',
     'EXEC getBusinessLineHistory')

SELECT * FROM #MyTempTable

方案二、创建临时表

CREATE TABLE #tmpBus
(
   COL1 INT,
   COL2 INT
)

INSERT INTO #tmpBus
Exec SpGetRecords 'Params'

方案三、使用 INSERT INTO … EXEC

在SQL Server 2005+版本中,可以使用 INSERT INTO … EXEC 语法,如下:

INSERT author_sales EXECUTE get_author_sales

方案四、使用用户自定义的SQL函数

SQL 函数定义如下:

CREATE FUNCTION CustomersByRegion 
(  
    @RegionID int  
)
RETURNS TABLE 
AS
RETURN 
  SELECT *
  FROM customers
  WHERE RegionID = @RegionID
GO

调用方式如下:

SELECT * INTO CustList FROM CustomersbyRegion(1)

在存储过程中的调用方式如下:

CREATE PROCEDURE uspCustomersByRegion 
(  
    @regionID int  
)
AS
BEGIN
     SELECT * FROM CustomersbyRegion(@regionID);
END
GO

方案五、使用 OPENQUERY 关键字

SELECT  *
INTO    #tmpTable
FROM    OPENQUERY(YOURSERVERNAME, 'EXEC test.dbo.prc_test 1')

你还有哪些解决方式呢?欢迎反馈、交流。。。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: .NET[C#]如何计算两个日期之间的时间间隔(天数)?

下一篇: [SQL Server]SQL Server中如何只返回日期数据类型的日期部分(Date)

本文永久链接码友网 » [SQL Server]SQL Server中怎样将从存储过程(stored procedure)中查询出来的结果集写入一个临时表

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册