sql2000的游标


CREATE PROCEDURE dbo.Proc_GetLeaveStatistics
(
   @StartTime datetime,
   @EndTime datetime,
   @status varchar(256)
)
AS
CREATE TABLE [dbo].[#LEAVE_temp] (
 [id] [int] IDENTITY (1, 1) NOT NULL  ,
 [UserName] [varchar] (256) null,
        [LeaveScope] [varchar](256) null,
 [CountLeaveHour] [varchar](256) NULL ,
 [VerificationName] [varchar](256) NULL ,
 [AgreeScope] [varchar](256) NULL ,
 [VerificationCountTime] [varchar](256) NULL ,
 [StatusExplain] [varchar](256) NULL
 
)
DECLARE @WriteID varchar(50),@UserName varchar(50),@LeaveScope varchar(128),@LeaveStartTime varchar(128),@LeaveEndTime varchar(128)
,@CountLeaveHour varchar(128),
@VerificationName varchar(128),@ID VARCHAR(50),
@AgreeScope varchar(128),@VerificationCountTime varchar(128),@StatusExplain varchar(128)
DECLARE LEAVE_CURSOR CURSOR FOR
 SELECT WriteID FROM ask_leave GROUP BY WriteID
OPEN LEAVE_CURSOR

FETCH FROM LEAVE_CURSOR INTO @WriteID
WHILE @@FETCH_STATUS=0
BEGIN
 if @status ='1'
begin
  DECLARE LEAVE_CURSOR1 CURSOR FOR
     select LEAVEID AS ID from VIEW_GetLeaveStatistics where leaveid in ( select leaveid from VIEW_GetLeaveStatistics
                  where LeaveStartTime between @StartTime and @EndTime and AgreeStatus=@status and WriteID=@WriteID
         UNION
                  select leaveid from VIEW_GetLeaveStatistics
                  where LeaveEndTime between @StartTime and @EndTime and AgreeStatus=@status and WriteID=@WriteID
                        )
OPEN LEAVE_CURSOR1
FETCH FROM LEAVE_CURSOR1 INTO @ID
WHILE @@FETCH_STATUS=0
BEGIN
  select @UserName=UserName,@LeaveScope=convert(varchar(16),LeaveStartTime,20)+'-'+convert(varchar(16),LeaveEndTime,20),@CountLeaveHour=CountLeaveHour,
                  @VerificationName=VerifationName,@AgreeScope=convert(varchar(16),AgreeStartTime,20)+'-'+convert(varchar(16), AgreeEndTime,20),
                  @VerificationCountTime=VerificationCountTime,@StatusExplain=StatusExplain from VIEW_GetLeaveStatistics where leaveid=@ID
    
    INSERT #LEAVE_temp(UserName,LeaveScope,CountLeaveHour,VerificationName,AgreeScope,VerificationCountTime,StatusExplain)
    VALUES (@UserName,@LeaveScope,@CountLeaveHour,@VerificationName,@AgreeScope,@VerificationCountTime,@StatusExplain)
    FETCH NEXT FROM  LEAVE_CURSOR1 INTO @ID
END
    CLOSE  LEAVE_CURSOR1
    DEALLOCATE  LEAVE_CURSOR1
 
 end
else
  begin
    DECLARE LEAVE_CURSOR2 CURSOR FOR
    select LEAVEID AS ID from VIEW_GetLeaveStatistics where leaveid in(select leaveid from VIEW_GetLeaveStatistics
                  where LeaveStartTime between @StartTime and @EndTime and WriteID=@WriteID
         UNION
                  select leaveid from VIEW_GetLeaveStatistics
                  where LeaveEndTime between @StartTime and @EndTime and WriteID=@WriteID
                        )
      OPEN LEAVE_CURSOR2
    FETCH FROM LEAVE_CURSOR2 INTO @ID
WHILE @@FETCH_STATUS=0
BEGIN
     select @UserName=UserName,@LeaveScope=convert(varchar(16) ,LeaveStartTime,20)+'-'+convert(varchar(16) ,LeaveEndTime,20),@CountLeaveHour=CountLeaveHour,
                  @VerificationName=VerifationName,@AgreeScope=convert(varchar(16),AgreeStartTime,20)+'-'+convert(varchar(16), AgreeEndTime,20),
                  @VerificationCountTime=VerificationCountTime,@StatusExplain=StatusExplain from VIEW_GetLeaveStatistics where leaveid=@ID
       
      INSERT #LEAVE_temp(UserName,LeaveScope,CountLeaveHour,VerificationName,AgreeScope,VerificationCountTime,StatusExplain)
      VALUES (@UserName,@LeaveScope,@CountLeaveHour,@VerificationName,@AgreeScope,@VerificationCountTime,@StatusExplain)
      FETCH NEXT FROM  LEAVE_CURSOR2 INTO @ID
 END
      CLOSE  LEAVE_CURSOR2
      DEALLOCATE  LEAVE_CURSOR2
  end
   FETCH NEXT FROM  LEAVE_CURSOR INTO @WriteID
END
    CLOSE  LEAVE_CURSOR
    DEALLOCATE  LEAVE_CURSOR
SELECT * FROM #LEAVE_temp

GO
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值