回 帖 发 新 帖 刷新版面

主题:怎样向考勤表中连续插入多个记录?

我在做考勤系统时,发现了一个问题,就是当员工请假时,必须向考勤表中连续插入多个记录,比如说请10天假
下面的语句只能插入一条记录
insert into Attendence(工作日期,员工号,状态)
values('2006-6-11',119,‘请假’)
我写了一个存储过程,输入工作日期,员工号,状态,请假天数,结果出错了
请教各位老师,给我点思路,让我开窍

回复列表 (共4个回复)

沙发

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

板凳

1楼的大哥写的存储过程基本上正确,但是忽略了一个问题:
就是请假不含双修日
举例说明:
6.30是星期五,同事小王要请6天假,
那么很显然7.1(星期六)和7.2(星期日)2天的考勤不能插入考勤表中

3 楼

哦哦,你早讲撒,11点给你答案

4 楼

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 你再把问题讲清楚啊!这样很浪费时间地啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册