CREATE TABLE #xms_staff_department
(
id int,
name varchar(128),
parent_id int,
parent_path varchar(512) ,
depth smallint,
is_delete tinyint,
sort smallint
)
INSERT INTO #xms_staff_department
SELECT id,name,0,'0,'+CONVERT(VARCHAR,id),1, (CASE WHEN IsVaild = 1 THEN 0 ELSE 1 END), dOrder FROM dept WHERE Pid = 0 DECLARE @id INT
DECLARE @parent_path VARCHAR(128)
DECLARE @cursor1 CURSOR
SET @cursor1 = CURSOR FORWARD_ONLY STATIC FOR
SELECT id, parent_path FROM #xms_staff_department
OPEN @cursor1
FETCH NEXT FROM @cursor1 INTO @id, @parent_path
WHILE (@@FETCH_STATUS = 0)
BEGIN INSERT INTO #xms_staff_department
SELECT id,name,Pid, @parent_path+','+CONVERT(VARCHAR,id),2, (CASE WHEN IsVaild = 1 THEN 0 ELSE 1 END), dOrder FROM dept WHERE Pid = @id DECLARE @cursor2 CURSOR
DECLARE @id2 INT
DECLARE @parent_path2 VARCHAR(128)
SET @cursor2 = CURSOR FORWARD_ONLY STATIC FOR
SELECT id, parent_path FROM #xms_staff_department WHERE parent_id = @id
OPEN @cursor2
FETCH NEXT FROM @cursor2 INTO @id2, @parent_path2
WHILE (@@FETCH_STATUS = 0)
BEGIN INSERT INTO #xms_staff_department
SELECT id,name,Pid, @parent_path+','+CONVERT(VARCHAR,id),3, (CASE WHEN IsVaild = 1 THEN 0 ELSE 1 END), dOrder FROM dept WHERE Pid = @id2 DECLARE @cursor3 CURSOR
DECLARE @id3 INT
DECLARE @parent_path3 VARCHAR(128)
SET @cursor3 = CURSOR FORWARD_ONLY STATIC FOR
SELECT id, parent_path FROM #xms_staff_department WHERE parent_id = @id2
OPEN @cursor3
FETCH NEXT FROM @cursor3 INTO @id3, @parent_path3
WHILE (@@FETCH_STATUS = 0)
BEGIN INSERT INTO #xms_staff_department
SELECT id,name,Pid, @parent_path+','+CONVERT(VARCHAR,id),4, (CASE WHEN IsVaild = 1 THEN 0 ELSE 1 END), dOrder FROM dept WHERE Pid = @id3 DECLARE @cursor4 CURSOR
DECLARE @id4 INT
DECLARE @parent_path4 VARCHAR(128)
SET @cursor4 = CURSOR FORWARD_ONLY STATIC FOR
SELECT id, parent_path FROM #xms_staff_department WHERE parent_id = @id3
OPEN @cursor4
FETCH NEXT FROM @cursor4 INTO @id4, @parent_path4
WHILE (@@FETCH_STATUS = 0)
BEGIN INSERT INTO #xms_staff_department
SELECT id,name,Pid, @parent_path+','+CONVERT(VARCHAR,id),5, (CASE WHEN IsVaild = 1 THEN 0 ELSE 1 END), dOrder FROM dept WHERE Pid = @id4 FETCH NEXT FROM @cursor4 INTO @id4, @parent_path4
END
CLOSE @cursor4
DEALLOCATE @cursor4 FETCH NEXT FROM @cursor3 INTO @id3, @parent_path3
END
CLOSE @cursor3
DEALLOCATE @cursor3 FETCH NEXT FROM @cursor2 INTO @id2, @parent_path2
END
CLOSE @cursor2
DEALLOCATE @cursor2 FETCH NEXT FROM @cursor1 INTO @id, @parent_path
END
CLOSE @cursor1
DEALLOCATE @cursor1 select * from #xms_staff_department
drop table #xms_staff_department

上述是个简单的sql游标的使用方法,写法很水,但需要注意的是

SET @cursor = CURSOR FORWARD_ONLY STATIC FOR "标注红色的使用"

备注: SQL游标的执行效率之静态游标的高效率执行

STATIC静态游标创建将由该游标使用的数据的临时复本,对游标的所有请求都从tempdb 中的这一临时表中得到应答,因此在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改

FORWARD_ONLY 指定数据只能从第一条到最后一条

sql2008游标FORWARD_ONLY STATIC 的使用方式的更多相关文章

  1. 浅谈游标选项 Static|Keyset|DYNAMIC|FAST_FORWARD

    接好久之前太监的一篇Blog.现在补充几个选项的介绍 所用的语句都是这个 IF OBJECT_ID('T1') IS NOT NULL DROP TABLE T1 GO CREATE TABLE T1 ...

  2. SQL2008游标

    最近让写一个自动生成数据的存储过程,其中会遍历表中数据并做出相应处理,因为数据量不算太大所以使用到了游标,初识游标遇到几个小问题,所以来和大家一起分享一下: 使用游标的五个步骤: 1.声明游标 语法: ...

  3. Mysql 游标的定义与使用方式

    创建游标: 首先在MySql中创建一张数据表: CREATE TABLE IF NOT EXISTS `store` (   `id` int(11) NOT NULL AUTO_INCREMENT, ...

  4. 游标中的static参数

    以下测试用例将演示,使用static的游标和不使用的区别: if object_id(N't_test',N'u') is not null drop table t_test go create t ...

  5. Sql2008 r2 使用ftp 公布和订阅方式同步数据

    Sql2008 r2使用公布和订阅方式同步数据 因为非常多图片 本篇没有图片 详情能够进入下载页  http://download.csdn.net/download/yefighter/760374 ...

  6. sqL编程篇(三) 游标与存储过程

    sql编程2 游标与存储过程 sql编程中的游标的使用:提供的一种对查询的结果集进行逐行处理的一种方式不用游标的处理解决方式:逐行修改工资update salar set 工资=‘新工资’ where ...

  7. SQL游标(cursor)详细说明及内部循环使用示例

    游标 游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果.每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理. 游标是处理 ...

  8. SQL Server编程(05)游标【转载】

    在关系数据库中,我们对于查询的思考是面向集合的.而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服. 正常面向集合的思维方式是: 而对于游标来说: ...

  9. SQL Server游标的使用【转】

    游标是邪恶的! 在关系数据库中,我们对于查询的思考是面向集合的.而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服. 正常面向集合的思维方式是: ...

随机推荐

  1. 第1 章初识Python

    1.print()—输出 print()函数的基本用法如下: print(输出内容) 其中,输出内容可以是数字和字符串(使用引号括起来),此类内容将直接输出,也可以是包含运算符的表达式,此类内容将计算 ...

  2. 二十、Mysql 连接的使用

    Mysql 连接的使用 在前几章节中,我们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据. 本章节我们将向大家介绍如何使用 MySQL 的 JOIN ...

  3. The Apache Tomcat Servlet/JSP Container

    1.Tomcat部署的场景分析 通常,我们对tomcat单机部署需求可以分为几种: 单实例单应用 (一个tomcat 一个web应用) 单实例多应用 (一个tomcat多个应用) 多实例单应用 (多个 ...

  4. tp5查询

    TP5的EXP.批量查询.聚合查询等. <!--more--> //使用EXP条件表达式,表示后面是原生的SQL表达式 $result = Db::table('think_inno')- ...

  5. ecshop里操作session与cookie

    目录 操作session 操作cookie html模板里提交保存用用户名 php里 js里保存cookie js里读取cookie html模板里smart的保留变量 html模板里取session ...

  6. usb gadge驱动设计之我是zero

    此处将以zero.c为例进行讲解. 第一次接触zero.c驱动的时候,是因为某项目需要,提供一种usb字符设备,希望能够通过字符设备打开,读取和发送文件.当时能想到的就是zero.c文件,本打算按照z ...

  7. Play on Words HDU - 1116 (并查集 + 欧拉通路)

    Play on Words HDU - 1116 Some of the secret doors contain a very interesting word puzzle. The team o ...

  8. 动态规划:HDU2844-Coins(多重背包的二进制优化)

    Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  9. [BZOJ3312][USACO]不找零(状压DP)

    Description 约翰带着 N 头奶牛在超市买东西,现在他们正在排队付钱,排在第 i 个位置的奶牛需要支付 Ci元.今天说好所有东西都是约翰请客的,但直到付账的时候,约翰才意识到自己没带钱,身上 ...

  10. V4L2学习(三)框架分析

    整个v4l2的框架分为三层: 在应用层,我们可以在 /dev 目录发现 video0 类似的设备节点,上层的摄像头程序打开设备节点进行数据捕获,显示视频画面.设备节点的名字很统一,video0 vid ...