一个拼凑sql,输出变量的 存储过程
/*
从定位信息临时表根据分站类型抽取 信息插入考勤表
*/
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

浙公网安备 33010602011771号