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. popen和pclose详解及实例

    popen函数是标准c提供的一个管道创建函数,其内部操作主 要是创建一个管道,调用fork创建子进程,关闭不需用的文件描述符,调用exec函数族执行popen的第一个参数.然后等到关闭. 也就是说我们 ...

  2. 模态框获取内容jQuery

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 【jenkins】jenkins服务器与svn服务器时间不一致出现的问题

    问题描述: svn提交了一次更新包,到了jenkins提交更新的时候,第一次代码没有生效,然后重新提交了一次,第二次才生效. 问题排查: 1.首先第一反应比对了下两次更新的包文件是否一致,然后发现大小 ...

  4. phpspider案例

    phpspider案例 <?php require './autoload.php'; use phpspider\core\phpspider; /* Do NOT delete this c ...

  5. JZOJ 100029. 【NOIP2017提高A组模拟7.8】陪审团

    100029. [NOIP2017提高A组模拟7.8]陪审团 Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limits   Got ...

  6. python常用内置算法用到的单词音频

    http://boscdn.bpc.baidu.com/v1/developer/990a728b-ca96-4bd9-9124-5357d829bf70.mp3 百度广播开发平台生成

  7. 739. Daily Temperatures

    https://leetcode.com/problems/daily-temperatures/description/ class Solution { public: vector<int ...

  8. HDU:1358-Period

    Period Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Desc ...

  9. 记忆化搜索:POJ1088-滑雪(经典的记忆化搜索)

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑 ...

  10. 03015_JSTL技术

    1.JSTL概述 (1)JSP(JSP Standard Tap Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能.jstl出现的目的同el一样也是要替代js ...