2010-01-26 49 views
1

我需要做的是將存儲過程(帶有大量參數)的結果放入表中。類似的東西:將存儲過程的結果存儲到表中,而不在SQL Server中手動創建表

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

然而,這似乎是一個不正確的語法,我搜索了它,人們首先手動和使用INSERT鍵把結果後創建表。這是我不能做的事情,因爲我有很多參數,我無法手動創建表格。

回答

4

在這樣的SELECT語句中不能使用存儲過程,這意味着你不能在使用存儲過程的執行點內聯地創建目標表。

您可能需要:

1)首先創建TABLE_1用正確的模式,然後做:
INSERT Table_1 (fieldlist) EXECUTE YourSproc....

2)改寫存儲過程作爲UNSER定義的函數,並使用在SELECT INTO聲明:

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

我想你的第二個參數是不正確的,或者與更高版本的SQL Server一起工作,我正在使用SQL Server 2000,並且這個工作適合我。 SELECT * INTO Table_1 FROM ( SELECT * FROM dbo.YourFunction(與para spores相同的參數...) )x 感謝您的幫助。 – stckvrflw 2010-01-26 11:25:53

+0

是的,在SQL 2000中,您不能在SELECT INTO語句中使用UDF。從SQL 2005開始工作。 – AdaTheDev 2010-01-26 11:35:32

1

如果將存儲過程更改爲用戶定義的函數,則可以執行此操作。

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 
相關問題