认识静态与动态游标
来源:互联网 发布:饥荒修改软件 编辑:程序博客网 时间:2024/05/17 05:16
背景:
静态(STATIC)游标创建将由该游标使用的数据的临时复本。对游标的所有请求都从tempdb 中的这一临时表中得到应答;因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改
动态(DYNAMIC) 游标会反映在滚动游标时对结果集内的各行所做的所有数据更改。行的数据值、顺序和成员身份在每次提取时都会更改。动态游标不支持ABSOLUTE 提取选项。
不指定STATIC 关键字的时候, 默认定义的游标是动态(DYNAMIC) 的
如果很在意游标的类型, 应该在定义游标的时候, 加上游标类型定义的关键字, 并加上TYPE_WARNING 关键字, 以便在游标类型不是预期的情况下, 收到警告信息
演示:
下面的演示针对 STATIC 和DYNAMIC 游标, 显示两者在游标循环期的差异
-- 定义演示数据
IF OBJECT_ID('tempdb..#tb') IS NOT NULL
DROP TABLE #tb
CREATE TABLE #tb(
id int PRIMARY KEY,
col sysname)
INSERT #tb(
id, col)
SELECT 1, 'AA'
SELECT 2, 'BB'
SELECT 3, 'CC'
SELECT 4, 'DD'
-- 游标测试
DECLARE CUR_tb CURSOR LOCAL FORWARD_ONLY READ_ONLY TYPE_WARNING DYNAMIC--STATIC
FOR
SELECT
id, col
FROM #tb
-- 游标打开前删除记录
DELETE TOP (1)
FROM #tb
WHERE id = 4
SELECT 'before cursor open', * FROM #tb
-- 打开游标
OPEN CUR_tb
-- 游标打开后删除记录
DELETE TOP (1)
FROM #tb
WHERE id = 3
SELECT 'after cursor open', * FROM #tb
FETCH CUR_tb
WHILE @@FETCH_STATUS = 0
BEGIN
-- 游标循环中删除记录
DELETE TOP (1)
FROM #tb
WHERE id = 2
FETCH CUR_tb
END
CLOSE CUR_tb
DEALLOCATE CUR_tb
- 认识静态与动态游标
- 认识静态与动态游标
- 认识静态与动态游标
- 认识静态与动态游标
- 认识静态与动态游标
- 认识静态与动态游标
- 认识静态与动态游标
- 认识静态与动态游标
- 认识静态与动态游标
- 认识静态与动态游标
- 认识静态与动态游标
- 静态游标和动态游标
- 静态游标和动态游标
- oracle04_静态游标,动态游标
- 数据库里面的游标,动态游标和静态游标区别
- Oracle 静态 动态游标的使用
- Oracle 静态 动态游标的使用
- 动态 sql语句与动态 游标
- 中小企业信息化:坐公车还是买车
- EasyJWeb新版本中的一些改进
- 选择合适的游标类型
- 再论信息化的隐性成本
- [转贴]童继龙:在CIO与博客之间找到接合点
- 认识静态与动态游标
- 分析:ERP实施项目中体系管理部门的角色[转]
- 游标类型产生的数据检索问题
- 使用XDoclet生成代码
- div和span的意义的用法
- 《越狱》中的项目管理
- 无法在SQL 2005系统数据库中执行的T-SQL语句(XML处理)
- EasyJF开通文档交流平台
- 企业信息化中的“标准”、“行业”和“个性”