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. oc数组遍历

    #import <Foundation/Foundation.h> //数组遍历(枚举)对集合中的元素依此不重复的进行遍历 int main(int argc, const char * ...

  2. I am too vegetable to all kill the 51nod problems on level 2 and 3.

    51nod level 2:50/51 剩的一个题是切比雪夫距离转曼哈顿距离,现学的,bzoj3710过了,51nod上全wa了,很迷,可能有坑⑧. level 3:62/68 之前有的题有思路但是不 ...

  3. 多种语言书写 “ HelloWorld ”

    最基本的C: #include<stdio.h> int main(int argc, char const *argv[]) { printf("HelloWorld\n&qu ...

  4. 三、Linux 系统目录结构

    Linux 系统目录结构 登录系统后,在当前命令窗口下输入命令:  ls /  你会看到如下图所示: 树状目录结构: 以下是对这些目录的解释: /bin:bin是Binary的缩写, 这个目录存放着最 ...

  5. 十八、MySQL 排序

    MySQL 排序 我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段 ...

  6. VMWare workstation Pro 14 For Linux key

    VMWare workstation Pro 14 For Linux key: (我使用的Linux 系统是 Ubuntu16.04, 64位 ) 镜像是官方网址下载的,你也可以自己去官方网址下载: ...

  7. 第八届蓝桥杯C/C++ B组省赛----分巧克力

    分巧克力 问题描述 儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形. 为了公平起见,小明需要从这 N 块巧 ...

  8. 使用code::blocks编译windows的dll链接库

    因为机子上没有安装Visual Studio,所以找到了一种通过code::blocks编译dll的方式,踩到的坑是code::blocks默认的compiler是32位的,这样编译出的dll也是32 ...

  9. Python框架之Django学习笔记(十六)

    Django框架之表单(续) 今天简直无力吐槽了,去了香山,结果和网上看到的简直是天壤之别啊,说好的香山的枫树呢?说好的香山的红叶呢?说好的漫山遍野一片红呢?本以为在山上,一口气爬上去,沿路基本都是翠 ...

  10. Web前端知识体系V0.1

    学习,是一个建立“索引”的过程-好比我们读一本书,读完之后,再次看这本书的目录结构,就会联想起很多书中的具体内容: 博客,是一个回顾所学的载体-学习完教学Video之后,通过书写博客,以达到记忆的目的 ...