脑阔疼的双层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 语句.但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录.那么如何解决这种问题呢 ...
随机推荐
- aspectj xml
1.接口和类 1.1 ISomeService 接口 public interface ISomeService { public void doSome(); public void dade(); ...
- WebService_Demo
简述 使用IDEA开发webservice服务,从零开始一步一步指引你. 服务端开发 首先创建一个webservice项目,如下图 创建完项目后idea会帮我们创建一个类,helloword,我们把它 ...
- Mvc 多级控制器 路由重写 及 多级Views目录 的寻找视图的规则
1.那么我们再来看我们需要的访问方式,如下图 如果我们要访问Admin下的TestController里面的Index页面,那么我们输入Test/Index,这个肯定不行的.因为TestControl ...
- SpringBoot 2.x (11):定时任务与异步任务
定时任务:有时候我们需要做定时的一些操作,比如统计信息,定时发送邮件等 在SpringBoot中如何进行整合和使用呢? 有哪些方式可以实现定时任务呢? Java自带的java.util.timer: ...
- Android:Service通知Activity更新界面
Android有四大组件,其中包括service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题. 1.首先Activity调用Service 这个是比较基础的,它有两种 ...
- TFS数据库分离附加经验总结
因TFS数据库已经100多G,所在的服务器D盘已没有空间满足tfs数据库的增长速度,故必须分离复制到其它盘.在分离过程中,先后分离了ReportServer.ReportServerTempDB.Tf ...
- 【Web应用-Kudu】Kudu 管理和诊断 azure web 应用
Azure Kudu是 GitHub 上的一个开源项目,Kudu 站点 (也称为网站控制管理 SCM) 提供了一系列的在线工具,可以帮助用户查看 web 应用的设置,诊断 web 应用,以及安装 w ...
- vs2010调试sql2008存储过程
1.安装vs2010sp1补丁 2.vs中打开服务器资源管理器,并进行数据库连接,连接时要注意 3. 4.可以打开数据库中的存储过程进行调试了
- Mybatis配置多数据源
一. Spring配置多数据源 二. Spring配置数据源 三. MultipleDataSource的实现 1: package com.wbl.modal; 2: 3: import org. ...
- ubuntu 14.04 配置java 1.8环境变量
从官网上下载jdk 源文件,并解压 root@hett-PowerEdge-T30:/usr/local/src# tar -xzvf jdk-8u151-linux-x64.tar.gz 解压完成之 ...