2011-04-09 96 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