存储存储过程输出

时间:2011-04-09 07:38:25

标签: sql sql-server stored-procedures

我需要将存储过程的输出存储在#table
中 问题是我的程序的输出是一个70字段的表 所以,我不能在存储过程的输出之前创建#table 因为它需要很多努力。
我需要类似于select * into #table from Table_Name的解决方案 女巫自动创建#table

3 个答案:

答案 0 :(得分:2)

我在以下链接找到了解决方案:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=85347 因此,要存储存储过程的输出,我们需要使用OPENROWSET()函数
但在使用它之前,我们必须enable show advanced options
Ad Hoc Distributed Queries以下是解决方案:

sp_configure 'show advanced options', 1
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO
Select * into #temp 
from OPENROWSET('SQLOLEDB','Data Source=Myserver;Trusted_Connection=yes;Integrated Security=SSPI', 'Execute DB_Name..Prc')

对于参数我可以将它们添加为字符串whit程序撤销声明

'Execute DB_Name..Prc'
         + CAST(parameter1 AS varchar(50)) + .....
         + CAST(parameter(n) AS varchar(50))

答案 1 :(得分:1)

我想你想要OPENROWSET。查看:http://msdn.microsoft.com/en-us/library/ms190312.aspx


请注意,这些示例尚未经过测试。

--Example for master.dbo.sp_who
SELECT * INTO #TempSpWho
FROM OPENROWSET ('SQLOLEDB','Server=(local);
                  TRUSTED_CONNECTION=YES;',
                 'set fmtonly off exec master.dbo.sp_who')

来源:http://blogs.technet.com/b/wardpond/archive/2005/08/01/the-openrowset-trick-accessing-stored-procedure-output-in-a-select-statement.aspx


此外,如果您有SP的参数,则需要编写动态SQL:

DECLARE @testVariable varchar(10);
SET @testVariable = 'varTest';
EXEC( 'SELECT * INTO #TempSpWho
       FROM
       OPENROWSET(
         ''SQLNCLI'',
         ''Database=dbIDsAndNames;Uid=sa;Pwd=nosecurity;'',
         ''SET FMTONLY OFF
         EXEC [dbo].[mySproc] ''' + @testVariable + ''')') 

来源:http://www.dotnetspider.com/forum/163990-Working-with-Openrowset.aspx

注意:上面的例子都不是我最初创造的,所以如果你的工作可以归功于消息来源。

如果要手动构建临时表(即对所有70行不感兴趣),这将是方法:

CREATE TABLE #foo(
  [bar] int,
  baz varchar(123)
)
insert into #foo exec spDoSomething
select * from #foo
drop table #foo

答案 2 :(得分:0)

存储过程必须在其中使用一些select * from ..语句来生成此输出。你可以修改它,对吗?