脑阔疼的双层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 语句.但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录.那么如何解决这种问题呢 ...
随机推荐
- 让linux下的eclipse支持GBK编码
原文链接:http://leaze.blog.51cto.com/83088/195584 今天,把windows下的工程导入到了Linux下eclipse中,由于以前的工程代码,都是GBK编码的,而 ...
- docker 配置国内镜像源 linux/mac/windows
部分内容来自:http://guide.daocloud.io/dcs/daocloud-9153151.html 加速器官方DaoCloud承诺:加速器服务永久免费且无流量限制 使用前提:注册Dao ...
- jmeter常量吞吐量定时器
jmeter常量吞吐量定时器
- sql创建作业--自动执行存储过程
创建自动执行存储过程: 1.创建参数 2.删除已有同名的作业 3. 创建作业 4.创建作业步骤 5.连接服务器 6.创建作业调度 7.启动作业 ALTER PROCEDURE dbo.sx_pro_A ...
- powershell 版本问题
Login-AzureRmAccount : 无法将“Login-AzureRmAccount”项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确 ...
- navicate连接mysql
1. 打开navicate,选择连接 2. 编辑连接属性 编辑完成之后,连接成功.
- mac下只遍历目录不遍历文件
install brew install tree 命令 tree -d
- Fiddler模拟POST请求
在进行接口测试时,会模拟post请求,发送不同的请求参数,返回不同的结果,今天我们就来分享一下,怎么用Fiddler工具模拟post请求: 打开Fiddler工具,在右侧点击“composer”的选项 ...
- Airbnb:别抵制我,宝宝要过 10 岁生日
今日导读 喜欢旅游的你,一定听说或使用过 airbnb(爱彼迎),在出发前打开它,总是能通过它开始一段奇妙的旅行.可是最近,就在这个打着“共享家”概念的服务型网站正迎来十周年之际,它却遭到了很多国家的 ...
- CPP-基础:strcpy之于C++(
以下对strcpy函数错误的是? char atr1[]="string"; ]; char *str3; char *str4="sting"; A.strc ...