现在的位置: 首页 > 综合 > 正文

查找考勤记录要打印的存储过程_感悟大智慧

2012年02月13日 ⁄ 综合 ⁄ 共 2334字 ⁄ 字号 评论关闭

CREATE Procedure SelectMonthSecno
@PrtWokNo Varchar(50),
@PrtName   Varchar(50),
@PrtSecNo Varchar(50),
@StaTime   DateTime,
@EndTime   DateTime
as
Declare @EveMonth DateTime,@YearMonth Varchar(500),@Str Varchar(8000)
Declare @int int,@IntYear int,@IntMonth int,@StaYear int,@StaMonth int,@EndYear int,@EndMonth int
Declare @Year int,@Month int,@Day int,@GetDate DateTime
Declare @SelPrtStr Varchar(8000)    --用来存储查询的语句
Set @Str = '('
Set @SelPrtStr = 'Select Distinct Month,SecNo'   --27
if @PrtWokNo is not null
    Set @SelPrtStr = @SelPrtStr + ',WokNo'        --33
if @PrtName is not null
    Set @SelPrtStr = @SelPrtStr + ',Name'         --32,38
Set @SelPrtStr = @SelPrtStr + ' from AttPrt '    --39,44,45,50
Select @year=Datepart(Year,GetDate()),@month=Datepart(Month,GetDate()),@day=Datepart(Day,GetDate())  
Set @GetDate = (str(@year,len(@year)) + '-' + str(@month,len(@month)) + '-' + str(@day,len(@day)))
if @EndTime >= @GetDate
    Set @EndTime = GetDate() - 1
if @PrtWokNo is not null
    Set @SelPrtStr = @SelPrtStr + ' Where WokNo = '   + '''' + @PrtWokNo + ''''   
if @PrtName is not null
    Begin
       if len(@SelPrtStr) in (39,44,45,50)
          Set @SelPrtStr = @SelPrtStr + ' Where Name = ' + '''' + @PrtName + ''''
       else
          Set @SelPrtStr = @SelPrtStr + ' and Name = ' + '''' + @PrtName + ''''
    End  
if @PrtSecNo is not null
    Begin
       if len(@SelPrtStr) in (39,44,45,50)
          Set @SelPrtStr = @SelPrtStr + ' Where SecNo = ' + '''' + @PrtSecNo + ''''
       else
          Set @SelPrtStr = @SelPrtStr + ' and SecNo = ' + '''' + @PrtSecNo + ''''
    End
Select @int = 0,@StaYear = Year(@StaTime),@StaMonth = Month(@StaTime),@EndYear = Year(@EndTime),@EndMonth = Month(@EndTime)
Select @IntYear = @EndYear - @StaYear
if @IntYear = 0
    Set @IntMonth = @EndMonth - @StaMonth
Else
    Set @IntMonth = 12 * @IntYear + @EndMonth - @StaMonth
    While @int <= @IntMonth
          Begin
             Select @EveMonth = DateAdd(Month,@int,@StaTime)    
             if len(Month(@EveMonth)) = 2
                   Set @YearMonth = Str(Year(@EveMonth),len(Year(@EveMonth))) + '.' + Str(Month(@EveMonth),len(Month(@EveMonth)))
             else
                   Set @YearMonth = Str(Year(@EveMonth),len(Year(@EveMonth))) + '.0' + Str(Month(@EveMonth),len(Month(@EveMonth)))  
             Set @Str = @Str + @YearMonth   + ','
             Set @int = @int + 1  
          End  
Select @Str = SubString(@Str,0,len(@Str)) + ')'
if len(@SelPrtStr) in (39,44,45,50)
    Set @SelPrtStr = @SelPrtStr + ' Where Month in ' + @Str + ' Order by Month,SecNo'    
else
    Set @SelPrtStr = @SelPrtStr + ' and Month in ' + @Str + ' Order by Month,SecNo'    
Execute (@SelPrtStr)
GO

抱歉!评论已关闭.