主题:怎样向考勤表中连续插入多个记录?
dengmeizhong
[专家分:0] 发布于 2006-06-26 08:21:00
我在做考勤系统时,发现了一个问题,就是当员工请假时,必须向考勤表中连续插入多个记录,比如说请10天假
下面的语句只能插入一条记录
insert into Attendence(工作日期,员工号,状态)
values('2006-6-11',119,‘请假’)
我写了一个存储过程,输入工作日期,员工号,状态,请假天数,结果出错了
请教各位老师,给我点思路,让我开窍
回复列表 (共4个回复)
沙发
233238447 [专家分:1350] 发布于 2006-06-26 19:05:00
create proc trig
@b int, --请假多少天
@c varchar(20),--ID
@d datetime, --请假日期
@e varchar(11)--状态
as
declare @f int
set @f=0
while(1=1)
begin
set @f=@f+1
declare @y varchar(10)
set @y=DATEADD (dd ,@f,@d)
insert into Attendence(工作日期,员工号,状态)values(@y,@c,@e)
if(@f>=@b)
break
end
用这条语句试一下,你输入多少天,它就会循环执行多少次 insert into语句,并且日期会自动加1
板凳
dengmeizhong [专家分:0] 发布于 2006-06-27 14:28:00
1楼的大哥写的存储过程基本上正确,但是忽略了一个问题:
就是请假不含双修日
举例说明:
6.30是星期五,同事小王要请6天假,
那么很显然7.1(星期六)和7.2(星期日)2天的考勤不能插入考勤表中
3 楼
233238447 [专家分:1350] 发布于 2006-06-27 21:42:00
哦哦,你早讲撒,11点给你答案
4 楼
233238447 [专家分:1350] 发布于 2006-06-27 22:44:00
create proc trig
@b int, --请假多少天
@c varchar(20), --ID
@d datetime, --请假日期
@e varchar(11) --状态
as
declare @f int --当请假天数达到就退出
declare @a datetime --保存请假的时间
declare @g int --获取当前星期几
--赋初值
set @a=@d
set @g=0
set @f=0
---------
while(1=1) --条件永远为真
begin
set @f=@f+1 --请假一天,@F就加一
set @g=datepart(dw,@a) --获取请假日期是星期几
if(@g!=6 and @g!=7) --如果不是星期 6 或星期 7 就向里面添记录
insert into Attendence(工作日期,员工号,状态)values(@a,@c,@e)
else
set @f=@f-1 --如果是 那天就不算请假,@F再减一,己保证10天假期 放满
set @a=DATEADD(dd ,1,@a) --日期值加一
if(@f>=@b) --请假己满,不在添加记录
break
end
OK 你再把问题讲清楚啊!这样很浪费时间地啊
我来回复