分享
 
 
 

关于值班管理的存储过程

王朝mssql·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

关于值班管理的存储过程

关于值班管理的存储过程 一个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

以上为队列改变时生成新值班安排的存储过程

其他 诸如 规定假期 调整人员 大同小异 欢迎批评指正

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有