博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL NOTE--CURSOR
阅读量:6281 次
发布时间:2019-06-22

本文共 1946 字,大约阅读时间需要 6 分钟。

Cursor

--=============================================================================================
DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ]
     [ FORWARD_ONLY | SCROLL ]
     [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
     [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
     [ TYPE_WARNING ]
     FOR select_statement
     [ FOR UPDATE [ OF column_name [ ,...n ] ] ]
[;]

1。可以在Declare语句中为cursor赋值,也可以使用SET来为游标赋值;

2。LOCAL标明所定义的游标在当前上下文中可见(当前批处理/存储过程/函数中可见),
   GLOBAL标明所定义的游标在当前连接(SESSION)中可见,包括调用的存储过程/函数内部可见,默认时使用GLOBAL;
3。FORWARD_ONLY标明定义游标只能从结果集顶部向底部移动,访问的是sTATIC结果集;SCROLL标明游标可以向任意方向移动。
4。STATIC标明游标所操作的结果集为静态,执行时将结果集COPY放入TempDB中,使得后续或外部操作修改数据任然不会影响游标操作的结果集;
   DYNAMIC则与STATIC相反,当数据在后续操作或外部操作中被修改时,游标读取的数据是修改后的数据;
   KEYSET介于STATIC与DYNAMIC之间,只将游标结果集中每行的主键保存到TmepDB中;
   FAST_FORWAD依据上下文选择使用STATIC或DYNAMIC中一种
5。READ_ONLY标明游标只读取数据而不做任何修改操作
   SCROLL_LOCKS标明游标锁定结果集中数据,防止外部操作修改数据
   OPTIMISTIC不会锁定结果集中数据,但当在游标中更新数据时,如果该数据没有被外部操作更新,则游标更新可能成功,反之则失败;
6。使用OPEN CURSOR来打开触发器
7。使用FETCH [NEXT|PRIOR|FIRST|LAST|ABSOLUTE(N)|RELATIVE(N)] FROM cursorName INTO 来获取数据;
8。使用CLOSE来关闭游标
9。使用DEALLOCATE来释放游标

--=============================================================================================

@@FETCH_STATUS枚举值:
0:The FETCH statement was successful.
-1:The FETCH statement failed or the row was beyond the result set.
-2: The row fetched is missing.
--=============================================================================================

DECLARE @userId INT;
DECLARE @userName NVARCHAR(200);
DECLARE myCursor CURSOR READ_ONLY FAST_FORWARD FOR
SELECT UserId,UserName FROM dbo.Users

OPEN myCursor

FETCH NEXT FROM myCursor INTO @userId,@userName
WHILE(@@FETCH_STATUS=0)
BEGIN
PRINT @userName
FETCH NEXT FROM myCursor INTO @userId,@userName
END

CLOSE myCursor

DEALLOCATE myCursor

SELECT COUNT(1) FROM dbo.Users

--=============================================================================================
1.尽量避免使用游标
2.使用完游标一定得关闭并释放
3.如果可以,尽量使用只读(READ_ONLY)向前(FAST_FORWARD)游标
4.避免大结果集操作

 

 

转载地址:http://kzxva.baihongyu.com/

你可能感兴趣的文章
使用TS Session Broker实现终端服务负载均衡
查看>>
谁比谁傻?
查看>>
针对复杂***的情报分析实例
查看>>
Zabbix之微信订阅号平台报警
查看>>
利用路由器的流量导出功能部署IPS
查看>>
【职场酸甜苦辣咸】辞职总结
查看>>
Xtradb+Haproxy高可用数据库集群(二)haproxy负载均衡篇
查看>>
Centos7系列(一)Centos7新特性、安装与基本命令
查看>>
Wireshark系列之7 利用WinHex还原文件
查看>>
Python正则表达式匹配操作re模块
查看>>
使用Python脚本检验文件系统数据完整性
查看>>
面子工程之IP数据可视化
查看>>
Suse 10 + Oracle 10g的安装方法
查看>>
从客户端(content1="<table> <tbody> ...")中检测到有潜在危险的 Request.Form 值
查看>>
zabbix nginx error log监控
查看>>
OpenStack —— 计量服务Ceilometer(九)
查看>>
Gitlab持续集成-(.gitlab-ci.yml)
查看>>
HDFS 实验 (四) 集群操作
查看>>
Powershell查找Unknown Group
查看>>
偏执狂—通过SC实现WAP资源审批
查看>>