收藏 分享(赏)

实验27 使用游标.doc

上传人:hskm5268 文档编号:8770093 上传时间:2019-07-11 格式:DOC 页数:3 大小:39.50KB
下载 相关 举报
实验27 使用游标.doc_第1页
第1页 / 共3页
实验27 使用游标.doc_第2页
第2页 / 共3页
实验27 使用游标.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、实验 27 使用游标27.1 目标 理解并能简单使用游标27.2 背景知识由 SELECT 语句返回的行集包括满足该语句的 WHERE 子句中条件的所有行,称为结果集。应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理。这些应用程序需要一种机制以便每次处理一行或一部分行,游标提供了这种机制。27.3 实验内容1.游标的功能游标通过以下方式来扩展对结果集的处理能力: 允许在结果集中定位特定行 从结果集的当前位置检索一行或一部分行 支持对结果集中当前位置的行进行数据修改 为由其他用户对显示在结果集中的数据所做的更改提供不同级别的可见性支持2.T_SQL 游标的类型基于

2、数据库服务器的 DECLARE CURSOR 创建的 T_SQL 游标主要用于 T_SQL 脚本、存储过程和触发器。SQL Server 支持四种 API 服务器游标类型:静态游标、动态游标、只进游标、由键集驱动的游标。T-SQL 游标类型主要由 DECLARE CURSOR 命令定义时指定不同的选项决定,下面是该命令的语法:DECLARE cursor_name CURSOR LOCAL|GLOBALFORWARD_ONLY|SCROLLSTATIC|KEYSET|DYNAMIC|FAST_FORWARD READ_ONLY|SCROLL_LOCKS|OPTIMISTIC TYPE_WARN

3、INGFOR select_statement FOR UPDATE OF column_name,.n;这些游标检测结果集变化的能力和消耗资源(如在 tempdb 中所占的内存和空间)的情况各不相同。游标检测这些变化的能力也受事务隔离级别的影响。静态游标在滚动期间很少或根本检测不到变化,消耗的资源相对较少;动态游标在滚动期间能检测到所有变化,但消耗的资源也较多;由键集驱动的游标介于二者之间。3.在脚本、存储过程或触发器中使用游标在脚本、存储过程或触发器中使用 T-SQL 游标的典型过程为:(1)声明 T-SQL 变量包含游标返回的数据。为每个结果集列声明一个变量。声明足够大的变量来保存列返回

4、的值,并声明变量的类型为可从列数据类型隐式转换得到的数据类型。(2)使用 DECLARE CURSOR 语句将 T-SQL 游标与 SELECT 语句相关联。另外,DECLARE CURSOR 语句还定义游标的特性。(3)使用 OPEN 语句执行 SELECT 语句并填充游标。(4)使用 FETCH INTO 语句提取单个行,并将每列中的数据移至指定的变量中。然后,其他 T-SQL 语句可以引用那些变量来访问提取的数据值。T-SQL 游标不支持提取行块。(5)使用 CLOSE 语句结束游标的使用。关闭游标可以释放某些资源,例如游标结果集及其对当前行的锁定,但如果重新发出一个 OPEN 语句,则

5、该游标结构仍可用于处理。由于游标仍然存在,此时还不能重新使用该游标的名称。DEALLOCATE 语句则完全释放分配给游标的资源,包括游标名称。释放游标后,必须使用 DECLARE 语句来重新生成游标。4.在脚本中使用游标示例USE AdventureWorksSET NOCOUNT ONDECLARE vendor_id int, vendor_name nvarchar(50),message varchar(80), product nvarchar(50)PRINT - Vendor Products Report -DECLARE vendor_cursor CURSOR FORSEL

6、ECT VendorID, NameFROM Purchasing.VendorWHERE PreferredVendorStatus = 1ORDER BY VendorIDOPEN vendor_cursorFETCH NEXT FROM vendor_cursor INTO vendor_id, vendor_nameWHILE FETCH_STATUS = 0BEGINPRINT SELECT message = - Products From Vendor: +vendor_namePRINT message- Declare an inner cursor based on ven

7、dor_id from the outer cursor.DECLARE product_cursor CURSOR FORSELECT v.NameFROM Purchasing.ProductVendor pv, Production.Product vWHERE pv.ProductID = v.ProductID AND pv.VendorID = vendor_idOPEN product_cursorFETCH NEXT FROM product_cursor INTO productIF FETCH_STATUS WHILE FETCH_STATUS = 0BEGINSELECT message = + product;PRINT message;FETCH NEXT FROM product_cursor INTO productENDCLOSE product_cursorDEALLOCATE product_cursor- Get the next vendor.FETCH NEXT FROM vendor_cursor INTO vendor_id, vendor_nameENDCLOSE vendor_cursorDEALLOCATE vendor_cursor

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报