脑阔疼的双层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=''--负责人
PRINT('需要给['+@V_ReciveUserName+'][责任人]发送[期末]桌面任务'+@V_ReciveUserGh)
IF @V_NowStep=''--办理人
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=''--负责人
PRINT('需要给['+@V_NAME+'][责任人]发送[期中]桌面任务'+@V_NUMBER)
IF @V_BZ=''--办理人
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*********************************---
脑阔疼的双层SQLserver游标的更多相关文章
- 学JAVA的第二天,静态网站制作,脑阔一点疼
先从下载apache-tomcat-9.0.17开始 在下边这个网站下载,下边一步步来 下面删除的这些是暂时用不上的,先吧它删除了,因为会拖慢启动速度 下边把ROOT里边除WEB-INF外的全不删除了 ...
- Sqlserver游标复习
经常写存储过程,但今天在游标使用过程中还是疏忽了一些事情,执行过程中一直执行不下去,后来直接sqlserver挂了,教训啊! 代码虽简单,望铭记: Create PROCEDURE [dbo].[te ...
- SqlServer游标的创建与使用
前言 大家都对SqlServer视图.存储过程.触发器的创建与使用有一定的了解了,我们来看下什么是游标,怎么使用,什么时候用. SqlServer视图的创建与使用 SqlServer存储过程的创建与使 ...
- sqlserver 游标的使用
declare @temp_temp uniqueidentifier--临时变量 DECLARE aaa CURSOR for select Id from A ------------------ ...
- SqlServer游标简介
游标实例: Declare MyCusror Cursor Scroll For Select * From Master_Goods Order By GoodsID Ope ...
- sqlserver 游标
DECLARE ChangeInvCodeCursor CURSOR FOR SELECT A.name AS tablecolumn,C.name AS tablename FROM sys.col ...
- SQLServer游标(Cursor) (B)
游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行前进或向后浏览数据的能力.我们可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许 ...
- SQLServer 游标 (A)
游标 游标分为客户端游标和服务器端游标.Sql通过游标可以对一个结果集进行逐行处理.对于使用服务器端游标的过程有:声明.打开.读取.关闭.释放. 1 声明游标 1.1 SQL-92标准的声明 Decl ...
- SQLserver游标原理和使用方法
在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT 语句.但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录.那么如何解决这种问题呢 ...
随机推荐
- VS中以插件开发的思想开发Winform应用
简单定义: 插件(也称构件)式开发:主要内容就是一个宿主程序加上后期开发的若干插件程序构成整个系统! 宿主程序提供接口注册,插件注册实现接口,从而使不同的插件提供新的功能: 举例: 以下是用VS中的W ...
- Json的详细用法
参考博客:https://www.cnblogs.com/haiyan123/p/7829080.html 1.json(Javascript Obiect Notation,JS对象标记)是一种 ...
- python经典一百道习题(转自奶酪博客)
无论学习哪门计算机语言,只要把100例中绝大部分题目都做一遍,就基本掌握该语言的语法了. [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #Filena ...
- leetcode140 Word Break II
思路: 直接爆搜会超时,需要使用记忆化搜索.使用map把已经计算过的情况记录下来,避免重复计算. 实现: class Solution { public: vector<string> w ...
- 关于js对象中的,属性的增删改查问题
删除主要是delet方法: 1 function Person(){}; 2 var person = new Person(); 3 person.name = 'yy'; 4 person.gen ...
- Visual Studio 2005 移植 (札记之一)【zhuan】
Visual Studio 2005 移植 - WINVER,warning C4996, error LINK1104 一.WINVER Compile result: WINVER not d ...
- url post 请求方法
最近的项目是给手机app 提供方法. 因此 此方法可以进行接口测试 static class HttpClient { static CookieContainer cookies = new Coo ...
- uvm_misc——杂货铺(miscellaneous)
uvm_misc 是个很有意思的文件夹,本质上就是个UVM的杂货铺,包含一些很重要的class, task, function, 但不知道给归类到哪儿,所以,uvm_misc就很好地承担了这个任务,几 ...
- 查看mysql已有用户并删除
查看: SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; 删除: drop us ...
- 什么是Java Marker Interface(标记接口)
先看看什么是标记接口?标记接口有时也叫标签接口(Tag interface),即接口不包含任何方法.在Java里很容易找到标记接口的例子,比如JDK里的Serializable接口就是一个标记接口. ...