台灣最大程式設計社群網站
線上人數
1389
 
會員總數:244806
討論主題:188840
歡迎您免費加入會員
討論區列表 >> MS SQL >> 【MSSQL】運用sql的遞迴依據條件式判斷呼叫不同的方法
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
【MSSQL】運用sql的遞迴依據條件式判斷呼叫不同的方法
價值 : 50 QP  點閱數:225 回應數:0

樓主

AnTing Chien
門外漢
0 1
10 0
發送站內信

我想詢問一個遞迴的概念寫法,附上圖輔助描述
我有一張表,這張表是透過方法PraseJson丟入變數後回傳的表。


我的目的是想要寫一段SQL
當isTerminal = 0時,我就要呼叫方法PraseJson,當isTerminal = 1時,我就要呼叫方法InsertToDB
並在InsertToDB做完以後,將其回傳的@Id,存放在暫存@Table中。


目前已經寫出以下遞迴,如果符合isTerminal = 0的條件,就一直呼叫方法PraseJson,
程式寫法與執行完後的長相如下 :






但我想不出來要如何將以下條件加入我的遞迴寫法中呢?
當isTerminal = 0時,我就要呼叫方法PraseJson
當isTerminal = 1時,我就要呼叫方法InsertToDB
並在InsertToDB做完以後,將其回傳的@targetId,存放在暫存Table中

我可以先全部找完再insert,但我實際上的需求是希望可以達到,
當我有A方法與B方法時,會依照條件重複的呼叫這兩個方法去判斷要跑哪一個,
但會重複的做,希望可以使用遞迴去解決,但若有迴圈的方式可以提供也很感激!

我曾經也嘗試創造一個Function然後放入上述遞迴,再去呼叫自己,但沒有成功...

因方法裡面牽涉的table與呼叫其他方法較多,因此先沒有詳細敘述此部分,因為也與專案內容有關,
因此想詢問一個概念上的寫法,謝謝!

目前在網路上看的遞迴都只有一個條件的,還是說這是不允許的呢?
感覺與階層式的遞迴有關係,但目前爬文好多天都沒有看到相關應用範例...

--補充--
PraseJson是Function,其作用是將傳入的Json字串使用sql的openJson分解成key、value(2016以上的版本才有),
並透過isJson判斷是不是Terminal的值,以供後續判斷value值是否要再解析,最後回傳一個table變數。

InsertToDB是預存程序,其作用是將key、value做insert到table中,會回傳一個存入DB後自動生成的id。

暫存Table的長相會是許多InsertToDB執行完成後回傳的id,會使用暫存Table是因為我後續要再做其他事情。

InsertToDB之後table的長相


搜尋相關Tags的文章: [ mssql ] , [ 遞迴 ] , [ recursive ] , [ sql server ] , [ sql ] ,
本篇文章發表於2019-03-20 10:12
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
   

回覆
如要回應,請先登入.