2017-05-26 26 views
2

我有一個存儲過程和3個變量。我需要將它們全部插入臨時表中的同一行。這可能嗎?我試過插入存儲過程和其他變量到一個臨時表

INSERT INTO #Temp (@Ad, @B, @C, @SPInt) 
    SELECT 
     @Ad, @B, @C, EXEC sp_XYZ @A, @B, @C 

但是這不起作用。

+0

這是從你的問題不清楚'sp_XYZ'的各行,你想那些'#temp',或者如果你只是試圖捕獲返回值(這簡單得多:'EXEC @SPInt = sp_XYZ @A,@B,@ C'後面跟着'INSERT')。 –

回答

3

這最簡單的方法是修改存儲過程與其他內容一起返回輸入參數。

缺席,你需要在一些地方保存輸出結果,然後插入#Temp。這裏有一種方法:

create table #temp_exec (. . .); 
insert into #temp_exec (. . .) 
    exec sp_xyz @A, @B, @C; 

insert into #temp (a, b, c, . . .) 
    select @A, @B, @C, . . . 
    from #temp_exec; 

如果#temp開始爲空,那麼你並不需要另一個表:

insert into #temp (. . .) 
    exec sp_xyz @A, @B, @C; 

update #temp 
    set a = @A, b = @b, c = @c; 
+0

我怎麼沒有想到這一點,謝謝! –

1

不,你不能做到這一切在一個聲明。

你可以做INSERT..EXEC在一個聲明,然後在UPDATE語句添加的變量。但是你必須用兩個不同的語句來做到這一點。

+0

好的,謝謝。這將是一個問題,因爲SP返回一個int。我想我只會更新MAX(row_number),這會大大增加我的執行時間:(。 –

相關問題