一个拼凑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

 

posted @ 2009-06-03 12:52  koolay  阅读(2305)  评论(0)    收藏  举报