首页 > 代码库 > 自己的第一个存储过程

自己的第一个存储过程

技术分享
  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+1101                 begin102                     if @itemnum < @itemCount + 1103                     begin104                     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 +=1110                     update RS_Dpt set DptPrcNo = @itemDpn where DptSysID = @_RS_DptSysID111                     end112                     else begin113                     break114                     end115                 end116             end117         end118         else if (@_DptParentSysID = @DptParentSysID)            --不更改上级部门时!119         begin120             --更新121             update RS_Dpt set DptPrcNo = @_DptPrcNo,122                 DptNo = @DptNo, 123                 DptName = @DptName, 124                 DptDesc = @DptDesc125             where DptSysID = @DptSysID126         end
View Code

用于修改部门所用。

自己的第一个存储过程