脑阔疼的双层SQLserver游标

本来简单的双层游标没啥的,内层游标需要读取的是视图的内容,一直报“当前命令发生了严重错误。应放弃任何可能产生的结果。”的错误。无可奈何尝试先将视图的数据放到表变量中,之后再用游标遍历表变量。

简直很怀念Oracle的FOR IN SELECT

丢串代码纪念一下我的一上午。555.。。

-----------全局变量发送定时任务的方法的所有参数-------------

--*****************************--[遍历数据表查找临近期末时间的任务,任务前7天发任务给负责人和办理人]begin*********************************---
DECLARE QM_cursor CURSOR SCROLL FOR
--筛选距离任务的规定完成时间只剩7天的任务
SELECT Id FROM xxzx_NewBmOa01..CommTable_Dbsxlx WHERE IsDel='否' AND (SELECT 
DATEDIFF(dd,GETDATE(), d1))=7 AND GETDATE()<d1
    OPEN QM_cursor
    DECLARE @v_ID2 VARCHAR(20)
    FETCH NEXT FROM QM_cursor INTO @v_ID2
    WHILE @@FETCH_STATUS=0
    BEGIN
        ----------------------内层游标循环-----------------------------
        /*流程信息表的视图V_GetSignature不支持游标循环遍历
        我们先创建一个表变量@Userinfo将视图信息记录
        之后利用游标将表变量中的数据取出
        */
        DECLARE @Userinfo TABLE
          (
              XingMing VARCHAR(50),--姓名
              GongHao VARCHAR(50),--工号
              BuZhou VARCHAR(10)--流程步骤 根据流程步骤的接收人判断该人是负责人 还是 办理人
          ); 
         INSERT INTO @Userinfo(XingMing, GongHao,BuZhou)
         SELECT  ReciveUserName, ReciveUserGh,NowStep FROM NewBmOa..V_GetSignature WHERE GwId=@v_ID2 AND StepKey='xxzxsolft559753607-2194.Step'
            DECLARE BBL_cursor CURSOR SCROLL FOR
                SELECT  XingMing,GongHao,BuZhou FROM @Userinfo
                OPEN BBL_cursor
                DECLARE @V_ReciveUserGh VARCHAR(50)--人员工号
                DECLARE @V_ReciveUserName VARCHAR(50)--人员姓名
                DECLARE @V_NowStep VARCHAR(10)--步骤
                FETCH NEXT FROM BBL_cursor INTO @V_ReciveUserName,@V_ReciveUserGh,@V_NowStep
                WHILE @@FETCH_STATUS=0
                BEGIN
                    IF @V_NowStep='2'--负责人
                        PRINT('需要给['+@V_ReciveUserName+'][责任人]发送[期末]桌面任务'+@V_ReciveUserGh)
                    IF @V_NowStep='3'--办理人
                        PRINT('需要给['+@V_ReciveUserName+'][办理人]发送[期末]桌面任务'+@V_ReciveUserGh)
                    FETCH NEXT FROM BBL_cursor INTO @V_ReciveUserName,@V_ReciveUserGh,@V_NowStep
                END
                CLOSE BBL_cursor
                DEALLOCATE BBL_cursor
                DELETE @Userinfo WHERE 1=1;--清空表变量中的数据
        --------------------------------------------------------
        FETCH NEXT FROM QM_cursor INTO @v_ID2
    END
    CLOSE QM_cursor
    DEALLOCATE QM_cursor
--*****************************--[遍历数据表查找临近期末时间的任务,任务前7天发任务]end*********************************---

--*****************************--[遍历数据表查找到达期中时间的任务,当天发任务给负责人和办理人]begin*********************************---
DECLARE QZ_cursor CURSOR SCROLL FOR
--筛选距离任务的规定完成时间只剩7天的任务
SELECT Id  FROM xxzx_NewBmOa01..CommTable_Dbsxlx WHERE IsDel='否' AND convert(char(10),GETDATE(),111)=convert(char(10),d2,111)
    OPEN QZ_cursor
    DECLARE @v_ID VARCHAR(20)
    FETCH NEXT FROM QZ_cursor INTO @v_ID
    WHILE @@FETCH_STATUS=0
    BEGIN
        ----------------------内层游标循环-----------------------------
        /*流程信息表的视图V_GetSignature不支持游标循环遍历
        我们先创建一个表变量@Userinfo2将视图信息记录
        之后利用游标将表变量中的数据取出
        */
        DECLARE @Userinfo2 TABLE
          (
              XingMing VARCHAR(50),--姓名
              GongHao VARCHAR(50),--工号
              BuZhou VARCHAR(10)--流程步骤 根据流程步骤的接收人判断该人是负责人 还是 办理人
          ); 
         INSERT INTO @Userinfo2(XingMing, GongHao,BuZhou)
         SELECT  ReciveUserName, ReciveUserGh,NowStep FROM NewBmOa..V_GetSignature WHERE GwId=@v_ID AND StepKey='xxzxsolft559753607-2194.Step'
            DECLARE BBL_cursor CURSOR SCROLL FOR
                SELECT  XingMing,GongHao,BuZhou FROM @Userinfo2
                OPEN BBL_cursor
                DECLARE @V_NAME VARCHAR(50)--人员工号
                DECLARE @V_NUMBER VARCHAR(50)--人员姓名
                DECLARE @V_BZ VARCHAR(10)--步骤
                FETCH NEXT FROM BBL_cursor INTO @V_NAME,@V_NUMBER,@V_BZ
                WHILE @@FETCH_STATUS=0
                BEGIN
                    IF @V_BZ='2'--负责人
                        PRINT('需要给['+@V_NAME+'][责任人]发送[期中]桌面任务'+@V_NUMBER)
                    IF @V_BZ='3'--办理人
                        PRINT('需要给['+@V_NAME+'][办理人]发送[期中]桌面任务'+@V_NUMBER)
                    FETCH NEXT FROM BBL_cursor INTO @V_NAME,@V_NUMBER,@V_BZ
                END
                CLOSE BBL_cursor
                DEALLOCATE BBL_cursor
                DELETE @Userinfo2 WHERE 1=1;--清空表变量中的数据
        --------------------------------------------------------
        FETCH NEXT FROM QZ_cursor INTO @v_ID
    END
    CLOSE QZ_cursor
    DEALLOCATE QZ_cursor

--*****************************--[遍历数据表查找到达期中时间的任务,当天发任务]end*********************************---

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值