因為是分別呼叫Function與StoredProcedure,可以改由cursor的方式作業。
如下為原本的問題內容
//-------------------------------------------------
如標題簡述,想詢問如何撰寫一段SQL
假設我自己是一個方法叫做Function_A()
,我這個方法裡面會依據條件呼叫兩個方法,分別叫做Function_B()
與StoredProcedure_C
當我符合以下條件我就重複個別呼叫方法
isCall=1
呼叫Function_B()
isCall=0
呼叫StoredProcedure_C()
<--會操作insert、delete、update,故使用SP不好意思我詢問得很模糊,假設先不理Function_A()
、Function_B()
與StoredProcedure_C
實際再做什麼以及其目的性,想先知道一個架構或概念即可。
以下這個寫法想表達的概念是,一開始會呼叫Function_B(variableA)
,
再用這個表的內容做為依據,只要符合條件isCall=1
就一直呼叫Function_B(variableA)
( variableA只是先假定會傳入一個變數 )
若我要達成上述所敘,要怎麼運用遞迴去撰寫SQL呢?
;with cte as (
select
*
from
Function_B(variableA)
)
select
x.*
from
cte x
union all
select
z.*
from
cte y
cross apply Function_B(variableA) z
where y.isCall = 1
使用case when
,舉例有兩個function分別是加法跟減法動作
create function function_Add (@p1 int,@p2 int)
returns int
begin
return @p1 + @p2;
end;
create function function_Sub (@p1 int,@p2 int)
returns int
begin
return @p1 - @p2;
end;
with cte as (
select 'Add' action,1 p1,1 p2 union all
select 'Sub' action,1 p1,1 p2
)
select
case action when 'Add' then dbo.function_Add(p1,p2)
when 'Sub' then dbo.function_Sub(p1,p2)
end result
from cte