大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
存储过程和函数一样也可以递归调用,调用方法类似。如下是求某个数以内的数字求和:
CREATE PROCEDURE aProc_Test
@INPUT int,
@Sum int output
AS
BEGIN
SET NOCOUNT ON;
if(@Sum is null)
set @Sum=0
if(@INPUT>0)
begin
set @INPUT=@INPUT-1
set @Sum=@Sum+@INPUT
EXEC aProc_Test @INPUT,@Sum output
end
END
GO
--调用存储过程,对1~10的数字求和
DECLARE @OUT int,@output int
EXEC aProc_Test 11,@output output
SELECT [OUTPUT值]=@output
go
输出结果:
注意:递归存储过程一般会用到 output 或 return,两者返回值类型上有一定的区别,output 基本上没有限制,但 return 返回的一般是 int 类型。
下面是审核流中根据某一个节点查询下一个节点,就是用的 return 实现
CREATE PROCEDURE [dbo].[up_Flow_JudegNextStep]
@StepId int,
@FRId int,
@PosId int
AS
BEGIN
SET NOCOUNT ON;
declare @SRId int;
select @SRId = SRId from FL_FlowStep where StepId = @StepId;
--插入当前步骤
exec up_Flow_AddPath @FRId = @FRId, @StepId = @StepId, @SRId = @SRId, @ObjId = @PosId;
--处理分支
declare judgeCursor Cursor For
select FLDField,Operator,Value,NextStep from FL_FlowStepJudge a left join FL_FlowFormField b
on a.FLDId = b.FLDId where StepId = @StepId;
open judgeCursor;
declare @field varchar(10),@Operator varchar(10),@value varchar(10), @next int;
fetch next from judgeCursor into @field,@Operator,@value,@next;
while(@@FETCH_STATUS=0)
begin
declare @sql nvarchar(100);
declare @has int;
set @sql = 'select @a = count(1) from FL_FlowData where FRId='+CAST(@FRId as varchar(10))+' and '+@field+@Operator+''''+@value+'''';
exec sp_executesql @sql,N'@a int output',@has output;
if @has > 0
begin
close judgeCursor;
deallocate judgeCursor;
if @next > 0
begin
exec up_Flow_JudegNextStep @StepId=@next,@FRId=@FRId,@PosId=@PosId;
end
return 1;
end
fetch next from judgeCursor into @field,@Operator,@value,@next;
end
close judgeCursor;
deallocate judgeCursor;
return 0;
--处理分支结束
END
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189586.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...