2010-08-19 88 views
3

我需要類似當然不起作用的東西。從存儲過程插入到表中選擇結果集,但列數不同

insert into Table1 
(
    Id, 
    Value 
) 
select Id, value from 
(

    exec MySPReturning10Columns 

) 

我想從MySPReturning10Columns返回的結果集中填充Table1。這裏SP返回10列,表格只有2列。

只要SP的表格和結果集具有相同的列數,但在我的情況下它們不相同,下面的方法工作。

INSERT INTO TableWith2Columns 
    EXEC usp_MySPReturning2Columns; 

此外,我想避免添加「。」。作爲鏈接服務器只是爲了使openquery和openrowset工作無論如何。

有沒有在臨時表中定義表strucutre的方法(所有列都有數據類型和長度)?像CTE一樣。

+0

有沒有辦法在臨時表中定義表結構(所有列都有數據類型和長度)?像CTE一樣。 – Dave 2010-08-19 19:25:30

回答

7

你可以使用一個臨時表作爲中間人:

insert into #TempTable exec MySP 
insert into Table1 (id, value) select id, value from #TempTable 
-1

你不需要創建臨時表,你可以通過創建臨時視圖這樣

with tempView as EXEC MySPReturning10Columns insert into Table1 select id, value from tempView 

單查詢做臨時視圖儘快消失該語句結束執行

+0

這可能是最好的解決方案,但我得到錯誤: Msg 156,級別15,狀態1,行1 關鍵字'EXEC'附近的語法不正確。 – Dave 2010-08-19 20:12:17

+0

你使用哪個數據庫? – Manivasagan 2010-08-20 04:46:31

+1

它看起來像是'臨時視圖',你的意思是CTE(公用表表達式)。這是行不通的 - CTE查詢定義(http://technet.microsoft.com/en-us/library/ms175972(v=sql.105).aspx)必須符合與View相同的約束條件,即它必須是一個SELECT語句(http://technet.microsoft.com/en-us/library/ms187956.aspx)。 – 2013-09-26 14:58:06

0

- 好的,根據期望行數爲 - 從SP中聲明臨時表或表var。這個表格將基本上是你的SP的結果集。

DECLARE @spResult AS TABLE 
(
    ID INT, 
    VALUE FLOAT, 
    .... 
); 

- 獲取SP的結果集到臨時表中。

INSERT @spResult EXEC STORED_PROC; 

- 現在您可以查詢SP的ID和值的結果集;

INSERT Table1 (ID, VALUE) 
SELECT ID, VALUE FROM @spResult; 
+0

'CREATE'一個#temp表,或者'DECLARE'一個表@variable。 http://www.sqlteam.com/article/temporary-tables – mg1075 2013-03-07 13:43:16