自己的第一个存储过程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自己的第一个存储过程相关的知识,希望对你有一定的参考价值。
1 create proc [dbo].[udp_D8RsEidtDptInfo] 2 @DptSysID varchar(36), --部门系统编号(参数) 3 @DptParentSysID varchar(36), --上级部门编号(参数) 4 @DptPrcNo varchar(60), --节点深度编号(参数) 5 @DptNo varchar(30), --部门编号(参数) 6 @DptName varchar(60), --部门名称(参数) 7 @DptDesc varchar(250) --部门描述(参数) 8 as 9 declare @top_DptSysID varchar(36) --上级部门的部门系统编号 10 declare @top_DptPrcNo varchar(60) --上级部门的节点深度编号 11 declare @top_DptNo varchar(30) --上级部门的部门编号 12 declare @top_DptName varchar(60) --上级部门的部门名称 13 14 declare @_DptParentSysID varchar(36) --修改之前的父级部门系统编号 15 declare @_DptPrcNo varchar(60) --当前需要修改的部门节点深度编号 16 declare @itemCount int --当前部门的子部门数 17 18 --存储未修改部门之前的父级部门 19 select @_DptParentSysID = (select DptParentSysID from RS_Dpt where DptSysID=@DptSysID) 20 select @_DptPrcNo = (select DptPrcNo from RS_Dpt where DptSysID=@DptSysID) 21 22 select @top_DptSysID = @DptParentSysID; --获取上级部门的系统编号 23 24 select 25 @top_DptPrcNo = DptPrcNo, 26 @top_DptNo = DptNo, 27 @top_DptName = DptName 28 from RS_Dpt 29 where DptSysID = @DptParentSysID 30 31 declare @top_dpnLen int; --定义上级部门节点深度的总长度 32 select @top_dpnLen = len(@top_DptPrcNo); --赋值其长度↑ 33 34 declare @DpnNum int; --定义部门节点深度的筛选范围 35 declare @_DpnNum varchar(5); --定义子部门的伸展字符 36 declare @New_Dpn varchar(60); --定义新生成的一个子部门节点深度 37 declare @isDptPrcNo int; --定义用于判断部门编号是否存在 38 39 declare @leaveDpnLen int; --定义修改当前部门之后的节点深度的总长度 40 select @leaveDpnLen = len(@DptPrcNo) --赋值其长度↑ 41 42 if (@_DptParentSysID <> @DptParentSysID) --更改上级部门时! 43 begin 44 --筛选并填补空缺 45 set @DpnNum = 1; 46 while @DpnNum < 1000 47 begin 48 if (@DpnNum <= 999) 49 begin 50 set @_DpnNum = replicate(‘0‘,3-len(@DpnNum))+cast(@DpnNum as varchar(5)); 51 select @New_Dpn = @top_DptPrcNo + @_DpnNum; 52 select @isDptPrcNo = (select count(DptSysID) from RS_Dpt where DptPrcNo = @New_Dpn) 53 if (@isDptPrcNo = 0 and @DpnNum <= 999) 54 begin 55 select @_DptPrcNo = @New_Dpn; 56 break; 57 end 58 set @DpnNum += 1 59 end 60 end 61 62 --更新 63 update RS_Dpt set DptParentSysID = @DptParentSysID, 64 DptPrcNo = @_DptPrcNo, 65 DptNo = @DptNo, 66 DptName = @DptName, 67 DptDesc = @DptDesc 68 where DptSysID = @DptSysID 69 70 declare @isNull int; --是否存在部门 71 set @isNull = 0; --默认为0:不存在、1:存在 72 --判断其部门是否存在子部门 73 if exists(select DptSysID, 74 DptParentSysID, 75 DptPrcNo, 76 DptNo, 77 DptName, 78 DptDesc 79 from RS_Dpt where DptPrcNo like @DptPrcNo + ‘%‘and DptPrcNo <> @DptPrcNo ) 80 begin 81 select @isNull = 1; 82 end 83 else 84 begin 85 select @isNull = @isNull; 86 end 87 declare @itemDpn varchar(60) 88 declare @itemnum int 89 set @itemnum = 1 90 if(@isNull = 1) --存在子部门时 91 begin 92 select DptSysID, DptParentSysID, 93 DptPrcNo, DptNo, 94 DptName, DptDesc, 95 identity(int,1,1) as item into #_RS_Dpt 96 from RS_Dpt where DptPrcNo like @DptPrcNo + ‘%‘and DptPrcNo <> @DptPrcNo order by DptPrcNo 97 98 select @itemCount = (select count(item) from #_RS_Dpt) 99 100 while @itemnum < @itemCount+1 101 begin 102 if @itemnum < @itemCount + 1 103 begin 104 select @itemDpn = @_DptPrcNo + substring((select DptPrcNo from #_RS_Dpt where item = @itemnum), 105 @leaveDpnLen+1, 106 len((select DptPrcNo from #_RS_Dpt where item = @itemnum))-@leaveDpnLen) 107 declare @_RS_DptSysID varchar(36) 108 select @_RS_DptSysID = (select DptSysID from #_RS_Dpt where item = @itemnum) 109 select @itemnum +=1 110 update RS_Dpt set DptPrcNo = @itemDpn where DptSysID = @_RS_DptSysID 111 end 112 else begin 113 break 114 end 115 end 116 end 117 end 118 else if (@_DptParentSysID = @DptParentSysID) --不更改上级部门时! 119 begin 120 --更新 121 update RS_Dpt set DptPrcNo = @_DptPrcNo, 122 DptNo = @DptNo, 123 DptName = @DptName, 124 DptDesc = @DptDesc 125 where DptSysID = @DptSysID 126 end
用于修改部门所用。
以上是关于自己的第一个存储过程的主要内容,如果未能解决你的问题,请参考以下文章
Android - 通过 FragmentManager 替换片段后,片段返回到它们的第一个状态