存储过程到表的结果,而不是在SQL Server中手动创建表

时间:2010-01-26 09:30:31

标签: sql-server tsql stored-procedures sql-server-2000

我需要做的是,将存储过程的结果(包含大量参数)放入表中。这样的事情:

SELECT * INTO Table_1 FROM
(
EXEC [MY_DataBase].[dbo].[GET_Report] '%%', '%%', '%%', 'x', 'x', 'x', 'x', 'x', 'x' ....
) X

然而,这似乎是一个不正确的语法,我搜索它,人们首先手动创建表,并在使用INSERT键放置结果。这是我不能做的事情,因为我有很多参数,我不能手动创建表。

3 个答案:

答案 0 :(得分:4)

您不能在SELECT语句中使用这样的存储过程,这意味着您无法使用sproc在执行点内联创建目标表。

您需要:

1)首先使用正确的架构创建Table_1然后执行:
INSERT Table_1 (fieldlist) EXECUTE YourSproc....

2)将sproc重写为未定义的函数,并在SELECT INTO语句中使用它:

SELECT *
INTO Table_1
FROM dbo.YourFunction(same params as sproc...) x

答案 1 :(得分:1)

如果将存储过程更改为用户定义的函数,则可以执行此操作。

答案 2 :(得分:0)

您可以尝试此解决方案,它涉及:启用即席查询,使用SELECT..INTO创建临时表并使用OPENROWSET

-- you will need to enable Ad Hoc Remote Queries
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE 
GO

-- this assumes trusted connection
SELECT tmp.*
INTO #mytemptable
FROM OPENROWSET ('SQLOLEDB',
     'Server=SQLVM\SQL01;TRUSTED_CONNECTION=YES;Database=pubs',
     'EXEC sp_who') tmp

-- select from your temporary table
SELECT *
FROM #mytemptable