2015-02-11 96 views
0

我想從多個存儲過程插入數據。使用多個存儲過程將數據插入表

Trial_Format_sp返回2列,FieldAFieldB,但我想添加另一列以指示公司數據來自。

這是我的代碼,它不工作

create table TB 
(
    Company nvarchar(max) , 
    FieldA nvarchar(max), 
    FieldB nvarchar(max) 
) 

insert into TB 
"ComA" , exec DB1.dbo.Trial_Format_sp 

insert into TB 
"ComB" , exec DB2.dbo.Trial_Format_sp 

謝謝。

+0

你的表TB由三列的。你在SP中寫了什麼?你能證明嗎?它必須選擇兩列。 – 2015-02-11 02:32:48

+0

表TB 3列 存儲過程返回2列 然後我想在插入表TB 之前再添加1列,以表示數據來自哪個公司。 – njtd 2015-02-11 02:36:59

回答

2

您不能從EXEC中選擇,至少不能使用OPENQUERY。所以,如果你有設置,你可以嘗試:

INSERT INTO TB (Company, FieldA, FieldB) 
    SELECT "ComA", * 
    FROM OPENQUERY(Local, 'exec DB1.dbo.Trial_Format_sp;'); 

INSERT INTO TB (Company, FieldA, FieldB) 
    SELECT "ComB", * 
    FROM OPENQUERY(Local, 'exec DB2.dbo.Trial_Format_sp;'); 

另一種選擇是創建一個表變量,每個進程內調用的結果加載到獨立,然後傾倒這些結果與添加的列到一起真正的桌子。

例如:

DECLARE @TempResults TABLE 
(
    FieldA nvarchar(max), 
    FieldB nvarchar(max) 
); 

INSERT INTO @TempResults (FieldA, FieldB) 
    EXEC DB1.dbo.Trial_Format_sp; 

INSERT INTO TB (Company, FieldA, FieldB) 
    SELECT "ComA", tmp.FieldA, tmp.FieldB 
    FROM @TempResults tmp; 

DELETE FROM @TempResults; 

INSERT INTO @TempResults (FieldA, FieldB) 
    EXEC DB2.dbo.Trial_Format_sp; 

INSERT INTO TB (Company, FieldA, FieldB) 
    SELECT "ComB", tmp.FieldA, tmp.FieldB 
    FROM @TempResults tmp; 
相關問題