问题描述
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')
你还有哪些解决方式呢?欢迎反馈、交流。。。
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册