当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:22:00  来源:本站整理

关于值班管理的存储历程[MSSQL防范]

赞助商链接



  本文“关于值班管理的存储历程[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
?一个bt主任的要求 值班管理? 要求以下

1 一组行列? n 个人, 有4种角色,带领,男子,大妈,司机.n个人按照自己角色按次序排好队

2 值班要求:周一到周日 1个带领值班1个司机值班;周一到周日 每晚1个男子 值班;周六 周日 上午下午2个大妈值班;假期每天1个带领1个司机1个男子上午下午2个大妈

3 要求行列可增删查该 ,人员次序可以调整,行列发生改变时,值班表自动更新

4 要求行列人员随时可以抽调对列中的人员不参与本轮排序(出差或告假)下轮持续按行列次序排序,人员抽调后 ,行列自意向前顶替

5 换班等...

建2个表

1 watching

??? [datetime] 日期? [weekday]星期 [leaderid]带领id [maleid]男子id [female1]大妈1id [female2]大妈2id??[driverid] 司机id? [mark]备注

2 watching_person

?? [ordercode]人员编号 [personid] 人员id ?[part]人员角色 [leave]能否脱离? [mark]备注

part 为人员角色 1带领2男子3大妈4司机

当新的行列产生时需求更细从明天今后的值班安置表(此处为30天),然后将 按角色列队好的 起始位置传给存储历程 (即 领到从第几位开始排 司机从第几位开始排 男子 大妈...)

create proc Proc_WatchingSetup
? --参数为四种角色的起始位置
? @leader int,
? @Male int,
? @Female int,
? @Driver int
as

declare @i int?????????????????????????????????????????? --计数器
declare @j int
declare @PersonID int
declare @weekday int
declare @InsertPoint datetime
declare @msg char(20)

set @i=1
set @j=1

-- 事件开始
Begin tran ReChange
--删除明天今后的记录(行列已改变删除从前的)
delete from Watching where [Datetime]>GetDate()

if (@@error <>0)
?? Begin
???? rollback tran
???? set @msg='error1'
???? return
?? end

--重新插入后30天的日期和星期
while @i<=30
? begin
???? insert Watching (Datetime,WeekDay) values (dateadd(day,@i,{fn curdate()}),datepart(weekday,dateadd(day,@i,{fn curdate()})))????
???? set @i=@i+1
? end

if (@@error !=0)
?? Begin
???? rollback tran
???? set @msg='error2'
???? return
?? end

--开始利用游标

set @j=1

--////首先按列队次序读出带领的行列

declare cur_watchingPerson scroll cursor For
?? select Personid? from watching_person where part=1 order by orderCode asc

open cur_watchingPerson

--移动到开始位置
fetch absolute @leader from cur_watchingPerson into @PersonID
if @@fetch_status=-1
?? fetch first from cur_watchingperson into @PersonID

set @i=1


while @i<=30
? begin????

???? while @j<=7 --最长大概是1人插入7天
?????? begin???????
??????? update watching set LeaderId=@PersonID where [datetime]=(dateadd(day,@i,{fn curdate()}))???????
??????? if (@@error !=0)
????????? Begin
?????????? rollback tran
?????????? set @msg='error3'
????????? return
??????? end
??????? --假如不足7天就到周末 退出循环 换人
??????? select @weekday=datepart(weekday,dateadd(day,@i,{fn curdate()}))
??????? set @i=@i+1
??????? if (@weekday=1)
????????? break
?????????
?????? end

???? set @j=1
????
???? fetch next from cur_watchingperson into @PersonID
???? -- 假如超越边界 回头行列第一位
???? if @@fetch_status=-1
??????? fetch first from cur_watchingperson into @PersonID
? end

Close cur_watchingPerson
deallocate cur_watchingPerson

--////////////司机很带领完好一样
declare cur_watchingPerson4 scroll cursor For
?? select Personid? from watching_person where part=4 order by orderCode asc

open cur_watchingPerson4

--移动到开始位置
fetch absolute @driver from cur_watchingPerson4 into @PersonID
if @@fetch_status=-1
??? fetch first from cur_watchingperson4 into @PersonID

set @i=1

while @i<=30
? begin
???? while @j<=7 --最长大概是1人插入7天
?????? begin???????
??????? update watching set driverId=@PersonID where [datetime]=(dateadd(day,@i,{fn curdate()}))???????
??????? if (@@error !=0)
????????? Begin
????????? --rollback tran
????????? set @msg='error3'
????????? return
??????? end

??????? select @weekday=datepart(weekday,dateadd(day,@i,{fn curdate()}))
??????? set @i=@i+1
??????? if (@weekday=1)
????????? break
?????????
?????? end

???? set @j=1
???? fetch next from cur_watchingperson4 into @PersonID
???? -- 假如超越边界 回头行列第一位
???? if @@fetch_status=-1
??????? fetch first from cur_watchingperson4 into @PersonID
? end

Close cur_watchingPerson4
deallocate cur_watchingPerson4

--///////////

--男子每天1人值夜班 相对简单
declare cur_watchingPerson2 scroll cursor For
?? select Personid? from watching_person where part=2 order by orderCode asc

open cur_watchingPerson2

--移动到开始位置
fetch absolute @male from cur_watchingPerson2 into @PersonID
if @@fetch_status=-1
??? fetch first from cur_watchingperson2 into @PersonID

set @i=1

while @i<=30
? begin
?
???? update watching set MaleId=@PersonID where [datetime]=(dateadd(day,@i,{fn curdate()}))?????
???? if (@@error !=0)
?????? Begin
????????? rollback tran
????????? set @msg='error3'
????????? return
?????? end
??????
????? set @i=@i+1

???? fetch next from cur_watchingperson2 into @PersonID
???? -- 假如超越边界 回头行列第一位
???? if @@fetch_status=-1???
??????? fetch first from cur_watchingperson2 into @PersonID
?
? end

Close cur_watchingPerson2
deallocate cur_watchingPerson2

--大妈每周六周日2人值白班
declare cur_watchingPerson3 scroll cursor For
?? select Personid? from watching_person where part=3 order by orderCode asc

open cur_watchingPerson3

fetch absolute @female from cur_watchingPerson3 into @PersonID
if @@fetch_status=-1
??? fetch first from cur_watchingperson3 into @PersonID

set @i=1

while @i<=30
? begin

???? select @weekday=[weekday] from watching where [datetime]=(dateadd(day,@i,{fn curdate()}))
????
???? --判断 只有周末的半天才值班 安置2人
???? if @weekday=7 or @weekday=1
??????? begin???
??????????
??????? --插入第一位
??????? update watching set Female1=@PersonID where [datetime]=(dateadd(day,@i,{fn curdate()}))???????
????
??????? if (@@error !=0)
???????? Begin
?????????? rollback tran
?????????? set @msg='error3'
????????? return
??????? end

??????? fetch next from cur_watchingperson3 into @PersonID
??????? -- 假如超越边界 回头行列第一位
??????? if @@fetch_status=-1???
?????????? fetch first from cur_watchingperson3 into @PersonID???????
??????? --插入第二位
??????? update watching set Female2=@PersonID where [datetime]=(dateadd(day,@i,{fn curdate()}))???????
????
??????? if (@@error !=0)
???????? Begin
????????? --rollback tran
?????????? set @msg='error3'
????????? return
??????? end

?????? end
??????
????? set @i=@i+1
????? fetch next from cur_watchingperson3 into @PersonID
??????? -- 假如超越边界 回头行列第一位
??????? if @@fetch_status=-1???
?????????? fetch first from cur_watchingperson3 into @PersonID????
?
? end

Close cur_watchingPerson3
deallocate cur_watchingPerson3

commit tran

以上为行列改变时生成新值班安置的存储历程

其他 诸如 规定假期 调整人员 大同小异 欢送批判指正   以上是“关于值班管理的存储历程[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 关于值班管理的存储历程
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .