我有一個存儲過程和3個變量。我需要將它們全部插入臨時表中的同一行。這可能嗎?我試過插入存儲過程和其他變量到一個臨時表
INSERT INTO #Temp (@Ad, @B, @C, @SPInt)
SELECT
@Ad, @B, @C, EXEC sp_XYZ @A, @B, @C
但是這不起作用。
我有一個存儲過程和3個變量。我需要將它們全部插入臨時表中的同一行。這可能嗎?我試過插入存儲過程和其他變量到一個臨時表
INSERT INTO #Temp (@Ad, @B, @C, @SPInt)
SELECT
@Ad, @B, @C, EXEC sp_XYZ @A, @B, @C
但是這不起作用。
這最簡單的方法是修改存儲過程與其他內容一起返回輸入參數。
缺席,你需要在一些地方保存輸出結果,然後插入#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;
我怎麼沒有想到這一點,謝謝! –
不,你不能做到這一切在一個聲明。
你可以做INSERT..EXEC在一個聲明,然後在UPDATE語句添加的變量。但是你必須用兩個不同的語句來做到這一點。
好的,謝謝。這將是一個問題,因爲SP返回一個int。我想我只會更新MAX(row_number),這會大大增加我的執行時間:(。 –
這是從你的問題不清楚'sp_XYZ'的各行,你想那些'#temp',或者如果你只是試圖捕獲返回值(這簡單得多:'EXEC @SPInt = sp_XYZ @A,@B,@ C'後面跟着'INSERT')。 –