我需要做的是,将存储过程的结果(包含大量参数)放入表中。这样的事情:
SELECT * INTO Table_1 FROM
(
EXEC [MY_DataBase].[dbo].[GET_Report] '%%', '%%', '%%', 'x', 'x', 'x', 'x', 'x', 'x' ....
) X
然而,这似乎是一个不正确的语法,我搜索它,人们首先手动创建表,并在使用INSERT键放置结果。这是我不能做的事情,因为我有很多参数,我不能手动创建表。
答案 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