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

SQL Server 作者: Rector 630阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

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')

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

阅读了该文章的人还浏览了...

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

发布于: 2018-01-04 09:11:00
分享扩散:

文章评论

获取验证码