SQLServer之创建Transact-SQL游标
什么是游标
游标使用第一步创建游标语法
语法注释--cursor_name--Transact-SQL服务器游标定义的名称。 cursor_name必须符合有关标识符的规则。 --local--指定该游标的范围对在其中创建它的批处理、存储过程或触发器是局部的。 --该游标名称仅在这个作用域内有效。在批处理、存储过程、触发器或存储过程output参数中,该游标可由局部游标变量引用。--output参数用于将局部游标传递回调用批处理、存储过程或触发器,它们可在存储过程终止后给游标变量分配参数使其引用游标。--除非output参数将游标传递回来,否则游标将在批处理、存储过程或触发器终止时隐式释放。如果output参数将游标传递回来,则游标在最后引用它的变量释放或离开作用域时释放。 --global--指定该游标范围对连接是全局的。在由此连接执行的任何存储过程或批处理中,都可以引用该游标名称。 --该游标仅在断开连接时隐式释放。--备注--如果global和local参数都未指定,则默认值由“默认为本地游标”数据库选项的设置控制。 --forward_only--指定游标只能从第一行滚动到最后一行。fetch next是唯一支持的提取选项。--如果指定了forward_only而没有指定static、keyset和dynamic关键字,则游标作为dynamic游标进行操作。 --如果未指定forward_only和scroll,则默认为forward_only,--除非指定了关键字static、keyset或dynamic。static、keyset和dynamic游标默认为scroll。 --与odbc和ado等数据库API不同,static、keyset和dynamic Transact-SQL游标支持forward_only。 --scroll--指定所有的提取选项(first、last、prior、next、relative和absolute)均可用。 如果未在iso declare cursor中指定scroll,则next是唯一支持的提取选项。 --如果还指定了fast_forward,则无法指定scroll。 --static--定义一个游标,以创建将由该游标使用的数据的临时副本。对游标的所有请求都从tempdb中的这一临时表中得到应答;--因此,在对该游标进行提取操作时返回的数据中不反映对基表所做的修改,并且该游标不允许修改。 --keyset--指定当游标打开时,游标中行的成员身份和顺序已经固定。对行进行唯一标识的键集内置在tempdb内一个称为keyset的表中。--备注--如果查询引用了至少一个无唯一索引的表,则键集游标将转换为静态游标。--对基表中的非键值所做的更改(由游标所有者更改或由其他用户提交)可以在用户滚动游标时看到。 --其他用户执行的插入是不可见的(不能通过Transact-SQL服务器游标执行插入)。如果删除某一行,则在尝试提取该行时返回的@@fetch_status为-2。--从游标外部更新键值类似于删除旧行后再插入新行。具有新值的行不可见,且尝试提取具有旧值的行时返回的@@fetch_status为 -2。 --如果通过指定where current of子句来通过游标执行更新,则新值可见。 --dynamic--定义一个游标,以反映在滚动游标时对结果集内的各行所做的所有数据更改。 --行的数据值、顺序和成员身份在每次提取时都会更改。动态游标不支持absolute提取选项。 --fast_forward--指定已启用了性能优化的fast_forward和read_only游标。如果还指定了scroll或for_update,则无法指定fast_forward。--备注--可以在相同的declare cursor语句中使用fast_forward和forward_only。 --read_only--禁止通过该游标进行更新。无法在update或delete语句的where current of子句中引用游标。 --该选项优先于要更新的游标的默认功能。 --scroll_locks--指定通过游标进行的定位更新或删除一定会成功。将行读入游标时SQLServer将锁定这些行,以确保随后可对它们进行修改。 --如果还指定了fast_forward或static,则无法指定scroll_locks。 --optimistic--指定如果行自读入游标以来已得到更新,则通过游标进行的定位更新或定位删除不成功。 --当将行读入游标时,SQLServer不锁定行。 --相反,它使用timestamp列值的比较,或者如果表没有timestamp列则使用校验和值,以确定将行读入游标后是否已修改该行。--如果已修改该行,尝试进行的定位更新或定位删除将失败。如果还指定了fast_forward,则无法指定optimistic。 --type_warning--指定如果游标从所请求的类型隐式转换为另一种类型,则向客户端发送警告消息。 --select_statement--定义游标结果集的标准select语句。在游标声明的select_statement中不允许使用关键字compute、compute by、for browse和into。--备注--可以在游标声明中使用查询提示;但如果还使用for update of子句,请在for update of之后指定option( --for update [of column_name [,...n]]--定义游标中可更新的列。 如果提供了of 示例
示例结果第二步打开游标语法
语法解析
示例
示例结果第三步使用游标语法
语法注释
示例
示例结果(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- SQLServer触发器创建、删除、修改、查看示例代码
- sqlserver 聚集索引和非聚集索引实例
- sqlserver实现结果集的合并(干货)
- EF+SQLSERVER控制并发下抢红包减余额(改进)
- sql-server – 在SQL Server 2014中如何按时间间隔分组?
- SqlServer转换为Mysql的一款工具推荐(mss2sql)
- SqlServer性能优化用SQL(一)【锁监控】
- .net – 更新Entity Framework中的数据库模式
- sql-server-2005 – 如何在Windows 8中安装SQL Server 2005
- 改进SQL Server查询以将任意表转换为JSON