iT邦幫忙

0

請問如何將stored procedure回傳的select 結果丟進另一個stored procedure 參數中

  • 分享至 

  • xImage

遇到一個問題
想要將SP select 出的多筆資料結果,丟進另一個SP參數中,進行執行
SP_1 select 結果的多筆資料,如下圖https://ithelp.ithome.com.tw/upload/images/20230511/20146729rUM5G97Mot.png
想要將這個結果放進另一個SP的參數中
下圖我呼叫SP_1的結果
https://ithelp.ithome.com.tw/upload/images/20230511/20146729Dz9OuAGiAe.png
將呼叫結果丟進另一個SP_2參數中
https://ithelp.ithome.com.tw/upload/images/20230511/20146729wKHbblwiqI.png
在另一個SP_2進行select 查看丟進去的結果
https://ithelp.ithome.com.tw/upload/images/20230511/20146729U2jdpZPCKC.png
下圖為執行SP_2結果
https://ithelp.ithome.com.tw/upload/images/20230511/201467291GD4kkQRcT.png

發現stage_cd丟的結果並未丟進參數中 想請教是否有方式解決無法丟進數值的問題

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
alien663
iT邦研究生 5 級 ‧ 2023-05-11 16:03:42

或許這是你要的?
下此請善用程式碼區塊,不要用截圖,這樣別人才有辦法複製你的程式碼。

create or alter procedure SP_1 as begin
    select * from (
        values
            ('A'),('B'),('C'),('D')
    ) T(A)
end
go

create procedure SP_2 @vv varchar(10) as begin
	print(@vv)
end
go

exec SP_1

create table #temp(A varchar(2))

insert into #temp
	exec SP_1

select * from #temp

while exists (select 1 from #temp)
begin
	declare @tt varchar(2)
	select top 1 @tt = a from #temp
	exec SP_2 @tt
	delete from #temp where A = @tt
end
alien663 iT邦研究生 5 級 ‧ 2023-05-11 16:33:31 檢舉

補充一下,你的觀念有點問題,可以想像table也是一種變數,但是你SP_1的輸出卻是用varchar來接,這是非常奇怪的作法,上來問之前,如果先用下面的程式跑跑看,你其實就知道為什麼資料沒進去SP_2了。

declare @tt varchar(100)
exec @tt = sp_1
select @tt
0
Samuel
iT邦好手 1 級 ‧ 2023-05-12 08:47:38

T-SQL筆記7_單(雙)井字號_暫存Table與@資料表變數的使用
https://coolmandiary.blogspot.com/2020/09/t-sql7table.html

T-SQL筆記40_OPENROWSET與sp_helptext的使用_如何去查看一支預存程序,Trigger,Function的指令並只保留關鍵字該行命令rowset
https://coolmandiary.blogspot.com/2023/03/t-sql40openrowsetsphelptexttriggerfunct.html

0
PPTaiwan
iT邦好手 1 級 ‧ 2023-05-15 13:06:46

你的 SQL SERVER 是第幾版的,如果是 SQL 2016 以上的話可以用 JSON 互傳,非常好用又簡單。

問一下 GPT 他可以幫你解釋或是將 SP1 的內容丟給 GPT 請他產生 JSON 再丟給 SP2 來做處理,我用此方法寫了好多專案來做處理

我要發表回答

立即登入回答