2011-04-09 39 views
0

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

+0

不要怕我的朋友,我们得到的答案 – Alaa 2011-04-09 08:57:19

+0

或许这能够帮助http://stackoverflow.com/questions/3829201/sql-select-print-out-results-of-stored-procedue – adopilot 2011-04-09 17:04:23

回答

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') 

并为各个参数,我可以将其添加为字符串丝毫过程revoke语句来

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

存储过程必须使用一些select * from ..语句里面产生这种输出。你可以修改它,对吧?

+0

是的,但这个过程需要一些参数 所以,输出是不同的,每次我使用proc – Alaa 2011-04-09 07:46:30

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

注意:上面的例子都不是我最初创建的,所以信用就是这样o如果你的工作来源。

如果手动建立临时表(即在所有70个行不感兴趣。),这将是方法:

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

没问题;很高兴你明白了。 – Gibron 2011-04-09 16:55:11