资源描述:
《《游标事务和锁》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、----SQLServer2000第八章游标、事务和锁游标游标(Cursor)是一个用来保存“数据集”的容器。可以对其中的数据以记录为单位(利用循环技术)一行、一行地处理。游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL语句或是批处理存储过程触发器中的Transact_SQL进行管理。Transact_SQL游标不支持提取数据块或多行数据。对游标的处理过程DECLARE游标OPEN游标从一个游标中FETCH信息CLOSE或DEALLOCATE游标声明游标定义游标的滚动行为和用于生成游标对其进行操作的结果集的查询。声明一个游标主要包括以下
2、主要内容:游标名字数据来源(表和列)选取条件属性(仅读或可修改)声明游标SQL-92语法格式:DECLAREcursor_name[INSENSITIVE][SCROLL]CURSORFORselect_statement[FOR{READONLY
3、UPDATE[OFcolumn_name[,...n]]}]其中:cursor_name指游标的名字INSENSITIVE:表明会将游标定义所选取出来的数据记录存放在一临时表内(建立在tempdb数据库下)SCROLL:表明所有的提取操作,如FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOL
4、UTE都可用。如果不使用该保留字,那么只能进行NEXT提取操作。select_statement:是定义结果集的SELECT语句READONLY:表明不允许游标内的数据被更新,尽管在缺省状态下游标是允许更新的。UPDATE[OFcolumn_name[,…n]]:定义在游标中可被修改的列,如果不指出要更新的列,那么所有的列都将被更新。声明游标当游标被成功创建后,游标名成为该游标的惟一标识。如果在以后的存储过程触发器或Transact_SQL脚本中使用游标必须指定该游标的名字声明游标例:declarecur_royschedcursorforselectlor
5、ange,hirange,royaltyfromroyschedwheretitle_id=’BU1032’扩展的游标声明语法Transact-SQL扩展语法格式:DECLAREcursor_nameCURSOR[LOCAL
6、GLOBAL][FORWARD_ONLY
7、SCROLL][STATIC
8、KEYSET
9、DYNAMIC
10、FAST_FORWARD][READ_ONLY
11、SCROLL_LOCKS
12、OPTIMISTIC][TYPE_WARNING]FORselect_statement[FORUPDATE[OFcolumn_name[,...n]]]其中:L
13、OCAL:定义游标的作用域仅限在其所在的存储过程、触发器或批处理中。当建立游标的存储过程执行结束后,游标会被自动释放。因此我们常在存储过程中使用OUTPUT保留字,将游标传递给该存储过程的调用者。这样在存储过程执行结束后可以引用该游标变量。GLOBAL:定义游标的作用域是整个会话层会话层,指用户的连接时间,它包括从用户登录到SQLSERVER到脱离数据库的整段时间。选择GLOBAL表明,在整个会话层的任何存储过程、触发器或批处理中都可以使用该游标。只有当用户脱离数据库时该游标才会被自动释放。标准游标例:declarecur_authorscursorfors
14、electau_id,au_lname,au_fname,phone,address,city,state,contractfromauthors读游标例:declarecur_authorscursorforselectau_lname,au_fname,phone,address,city,statefromauthorsforreadonly更新游标例:declarecur_authorscursorforselectau_lname,au_fnamefromauthorsforupdate打开游标游标在声明以后,如果要从游标中读取数据必须打开游标。打
15、开一个Transact-SQL服务器游标使用OPEN命令其语法规则为:OPEN{{[GLOBAL]cursor_name}
16、cursor_variable_name}其中:GLOBAL:定义游标为一全局游标cursor_name:为声明的游标名字,如果一个全局游标和一个局部游标都使用同一个游标名。则如果使用GLOBAL便表明其为全局游标,否则表明其为局部游标。cursor_variable_name:为游标变量在游标被成功打开之后@@CURSOR_ROWS全局变量将用来记录游标内数据行数。读取游标中的数据当游标被成功打开以后,就可以从游标中逐行地读取数据以进
17、行相关处理。从游标中读取数据主要使用FETCH命令其