|
sql server 2000 游标用法小例(3) READ_ONLY 禁止通过该游标进行更新。在 UPDATE 或 DELETE 语句的 WHERE CURRENT OF 子句中不能引用游标。该选项优于要更新的游标的默认功能。
SCROLL_LOCKS 指定通过游标进行的定位更新或删除保证会成功。将行读取到游标中以确保它们对随后的修改可用时,Microsoft SQL Server 将锁定这些行。如果还指定了 FAST_FORWARD 或 STATIC,则不能指定 SCROLL_LOCKS。
OPTIMISTIC 指定如果行自从被读入游标以来已得到更新,则通过游标进行的定位更新或定位删除不会成功。当将行读入游标时 SQL Server 不会锁定行。相反,SQL Server 使用 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 (query_hint)。
如果 select_statement 中的子句与所请求的游标类型的功能有冲突,则 SQL Server 会将游标隐式转换为其他类型。有关详细信息,请参阅“隐式游标转换”。
FOR UPDATE [OF column_name [,…n]] 定义游标中可更新的列。如果提供了 OF column_name [,…n],则只允许修改列出的列。如果指定了 UPDATE,但未指定列的列表,则除非指定了 READ_ONLY 并发选项,否则可以更新所有的列。
备注
DECLARE CURSOR 定义 Transact-SQL 服务器游标的属性,例如游标的滚动行为和用于生成游标所操作的结果集的查询。OPEN 语句填充结果集,FETCH 从结果集返回行。CLOSE 语句释放与游标关联的当前结果集。DEALLOCATE 语句释放游标所使用的资源。
DECLARE CURSOR 语句的第一种格式使用 SQL-92 语法声明游标行为。DECLARE CURSOR 的第二种格式使用 Transact-SQL 扩展插件,这些扩展插件允许您使用在 ODBC 或 ADO 的数据库 API 游标函数中所使用的相同游标类型来定义游标。
不能混淆这两种格式。如果在 CURSOR 关键字的前面指定 SCROLL 或 INSENSITIVE 关键字,则不能在 CURSOR 和 FOR select_statement 关键字之间使用任何关键字。如果在 CURSOR 和 FOR select_statement 关键字之间指定任何关键字,则不能在 CURSOR 关键字的前面指定 SCROLL 或 INSENSITIVE。
如果使用 Transact-SQL 语法的 DECLARE CURSOR 不指定 READ_ONLY、OPTIMISTIC 或 SCROLL_LOCKS,则默认值如下:
如果 SELECT 语句不支持更新(由于权限不够、访问的远程表不支持更新等等),则游标为 READ_ONLY。
STATIC 和 FAST_FORWARD 游标默认为 READ_ONLY。
DYNAMIC 和 KEYSET 游标默认为 OPTIMISTIC。
游标名称只能被其他 Transact-SQL 语句引用。它们不能被数据库 API 函数引用。例如,声明游标之后,不能通过 OLE DB、ODBC 或 ADO 函数或方法引用游标名称。不能使用提取函数或 API 的方法来提取游标行;只能通过 Transact-SQL FETCH 语句提取这些行。
在声明游标后,可使用下列系统存储过程确定游标的特性。
系统存储过程 说明 sp_cursor_list 返回当前在连接上可视的游标列表及其特性。
sp_describe_cursor
|