日期:2014-05-18  浏览次数:20519 次

初学者 请教上下班的存储过程。。在线等
现在有如下表:
CREATE TABLE paiban
(
id varchar(100) primary key,
employee_id varchar(50) NOT NULL default '', --员工id
employee_name varchar(50) not null default '',--员工姓名
work_date varchar(50) NOT NULL default '', -- 上班日期
start_time varchar(50) NOT NULL default '', -- 上班时间
end_time varchar(50) NOT NULL default '', --下班时间
zaotui_or_chidao varchar(50) not null default '',--迟到或早退
shi_jia char(16) NOT NULL default '', --事假
xiu_jia char(16) NOT NULL default '', --休假
kuang_gong char(16) NOT NULL default ''--矿工

===========================
上下班时间用jsp已经记录到此表,我想写个每天24:00(光知道用waitfor time)自动执行上下班的存储过程,要是晚于8点,是迟到,下班时间要是早于18:00 ,就是早退,要是24小时内没有上下班时间,即为旷工,要是48小时没有记录,则是事假,(休假不处理),要是光有上班时间,或光有下班时间,即为矿工,其他我想 start_time-8:00=迟到时间,18:00-end_time=早退时间 ,我这种逻辑对吗,因为初学sql ,请谁给演示下这个存储过程怎么写?(最好有详细注释),谢谢热心朋友...

------解决方案--------------------
[code=SQL][/code]
--数据的设计不敢恭维,我写么多肯定也让行家笑话了,砸鸡蛋吧
create procedure sp_worktime_proc
as
declare cursor_employeeid cursor for
select employee_id,employee_name from employee --假设有你有一张employee表,应该有吧,你

declare @tempEmployeeID varchar(50),@tempEmployeeName varchar(50) --暂存employee_id
declare @Judge varchar(20),@SQL varchar(100)

open cursor_employeeid

fetch next from cursor_employeeid
into @tempEmployeeid,@tempEmployeeName

while(@@FETCH_STATUS = 0)
begin
if exists(select *from paiban where employee_id=@tempEmployeeID and datediff(day,work_date,getdate())=0)
begin
if len((select start_time from paiban where employee_id=@tempEmployeeID and datediff(day,work_date,getdate())=0))>0 --有上班报到
begin
select getdate() --太烦了,具体自己写了,计算机与8:00的时间差,再update zaotui_or_chidao
end
if len((select end_time from paiban where employee_id=@tempEmployeeID and datediff(day,work_date,getdate())=0))>0 --有上班报到
begin
select getdate() --太烦了,具体自己写了,计算机与18:00的时间差,再update zaotui_or_chidao
end
end
else
begin
set @Judge=(select zaotui+shi_jia+xiu_jia+kuang_gong from paiban where employee_id=@tempEmployeeID and 
datediff(day,cast(work_date as datetime),getdate())=1) --取昨天的状态

set @SQL='insert into paiban(employee_id,employee_name,work_date'

if (ltrim(rtrim(@Judge))= '旷工') or (ltrim(rtrim(@Judge))='事假')
set @SQL=@SQL+',shi_jia) values('''+@tempemployeeid+''','''+@tempemployeename+''','''+getdate()+''',''事假'')'
else
set @SQL=@SQL+',kuang_gong) values('''+@tempemployeeid+''','''+@tempemployeename+''','''+getdate()+''',''旷工'')'

exec @SQL
end
end
close cursor_employeeid

deallocate cursor_employeeid
go