自己的第一个存储过程

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
View Code

用于修改部门所用。

以上是关于自己的第一个存储过程的主要内容,如果未能解决你的问题,请参考以下文章

Android - 通过 FragmentManager 替换片段后,片段返回到它们的第一个状态

java 登录过程 - android片段,异步任务登录,Asp.net控制器,存储库

使用存储过程将星期一计算为一周的第一天

手把手教你构建自己的第一个Python包

如何将代码片段存储在 mongodb 中?

创建自己的代码片段(CodeSnippet)