您的位置:首页 > 数据库

一个拼凑sql,输出变量的 存储过程

2009-06-03 12:52 411 查看
/*

从定位信息临时表根据分站类型抽取 信息插入考勤表

*/

ALTER PROCEDURE dbo.sp_insertToAttendance

(

@cardNum nvarchar(50),

@occDay int,

@occTime datetime,

@whereCase nvarchar(100) --判断 的条件

)

AS

declare @sql nvarchar(500), --查询10分钟前到 定位信息的数量

@result int,

@sql2 nvarchar(500), --查询当前时间到10分钟后 定位信息的数量

@result2 int

set @sql=N'select @rc=count(*) from positionTemp where workSiteId in (select id from workSite where '+@whereCase+') and occTime between dateadd(mi,-10,'''+convert(char(19),@occTime,121)+''') and '''+convert(char(19),@occTime,121)+''''

set @sql2=N'select @rc=count(*) from positionTemp where workSiteId in (select id from workSite where '+@whereCase+') and occTime between '''+ convert(char(19),@occTime,121) +'''and dateadd(mi,10,'''+convert(char(19),@occTime,121)+''')'

exec sp_executesql @sql , N'@rc int output',@result output

exec sp_executesql @sql2 , N'@rc int output',@result2 output

if (@result>0 and @result2<1)--由此判断为上班定位信息

begin

if not exists(select * from attendance where cardNum=@cardNum and occDay=@occDay) --判断是否存在该员工当天的考勤记录

--begin

-- update attendance set inTime=@occTime where cardNum=@cardNum and occDay=@occDay --存在,则更新该员工的上班时间

-- end

-- else

begin

insert attendance(cardNum,inTime,occDay) values(@cardNum,@occTime,@occDay) --不存在,则插入员工的上班记录

end

end

else if(@result>1 and @result2<1) --由此判断为下班定位信息

begin

if exists(select * from attendance where cardNum=@cardNum and occDay=@occDay) --判断是否存在该员工当天的考勤记录

begin

update attendance set inTime=@occTime where cardNum=@cardNum and occDay=@occDay --存在,则更新该员工的上班时间

end

else

begin

insert attendance(cardNum,inTime,occDay) values(@cardNum,@occTime,@occDay) --不存在,则插入员工的上班记录

end

end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: