将存储过程的结果插入临时表中

我如何做一个SELECT * INTO [temp table] FROM [stored procedure] ? 不是FROM [Table]并且没有定义[temp table]

SelectBusinessLinetmpBusLine所有数据tmpBusLine可以正常工作。

select *
into tmpBusLine
from BusinessLine

我尝试的是相同的,但使用返回数据的stored procedure并不完全相同。

select *
into tmpBusLine
from
exec getBusinessLineHistory '16 Mar 2009'

输出消息:

Msg 156,Level 15,State 1,Line 2关键字'exec'附近的语法错误。

我已经阅读了几个创建与输出存储过程相同的结构的临时表的示例,该示例工作正常,但不提供任何列是很好的。


你可以使用OPENROWSET。 看一看。 如果尚未启用Ad Hoc分布式查询,我还包含sp_configure代码以启用Ad Hoc分布式查询。

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'

在SQL Server 2005中,您可以使用INSERT INTO ... EXEC将存储过程的结果插入到表中。 从MSDN的INSERT文档(对于SQL Server 2000,实际上):

--INSERT...EXECUTE procedure example
INSERT author_sales EXECUTE get_author_sales
链接地址: http://www.djcxy.com/p/4217.html

上一篇: Insert results of a stored procedure into a temporary table

下一篇: How can I remove duplicate rows?