协慌网

登录 贡献 社区

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

如何进行SELECT * INTO [temp table] FROM [stored procedure] ?不是FROM [Table]而没有定义[temp table]

BusinessLine Select所有数据到tmpBusLine工作正常。

select *
into tmpBusLine
from BusinessLine

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

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

输出消息:

消息 156,级别 15,状态 1,行 2 关键字'exec' 附近的语法不正确。

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

答案

你可以使用OPENROWSET 。看一看。我还添加了 sp_configure 代码以启用 Ad Hoc Distributed Queries,以防它尚未启用。

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