游标使用经典范例

A.在简单的游标中使用 FETCH获取记录
下例为 authors 表中姓以字母 B 开头的行声明了一个简单的游标,并使用 FETCH NEXT 逐个提取这些行。FETCH 语句以单行结果集形式返回由 DECLARE CURSOR 指定的列的值。

USE pubs
GO
DECLARE authors_cursor CURSOR FOR
SELECT au_lname FROM authors
WHERE au_lname LIKE 'B%'
ORDER BY au_lname

OPEN authors_cursor

-- Perform the first fetch.
FETCH NEXT FROM authors_cursor

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
   -- This is executed as long as the previous fetch succeeds.
   FETCH NEXT FROM authors_cursor
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

B. 使用 FETCH 将字段值存入变量
下例与上例相似,但 FETCH 语句的输出存储于局部变量而不是直接返回给客户端。PRINT 语句将变量组合成单一字符串并将其返回到客户端。

USE pubs
GO

-- Declare the variables to store the values returned by FETCH.
DECLARE @au_lname varchar(40), @au_fname varchar(20)

DECLARE authors_cursor CURSOR FOR
SELECT au_lname, au_fname FROM authors
WHERE au_lname LIKE 'B%'
ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Perform the first fetch and store the values in variables.
-- Note: The variables are in the same order as the columns
-- in the SELECT statement.

FETCH NEXT FROM authors_cursor
INTO @au_lname, @au_fname

-- Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN

   -- Concatenate and display the current values in the variables.
   PRINT 'Author: ' + @au_fname + ' ' +  @au_lname

   -- This is executed as long as the previous fetch succeeds.
   FETCH NEXT FROM authors_cursor
   INTO @au_lname, @au_fname
END

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

C. 声明 SCROLL 游标并绝对定位
下例创建一个 SCROLL 游标,使其通过 LAST、PRIOR、RELATIVE 和 ABSOLUTE 选项支持所有滚动能力。

USE pubs
GO

-- Execute the SELECT statement alone to show the
-- full result set that is used by the cursor.
SELECT au_lname, au_fname FROM authors
ORDER BY au_lname, au_fname

-- Declare the cursor.
DECLARE authors_cursor SCROLL CURSOR FOR
SELECT au_lname, au_fname FROM authors
ORDER BY au_lname, au_fname

OPEN authors_cursor

-- Fetch the last row in the cursor.
FETCH LAST FROM authors_cursor

-- Fetch the row immediately prior to the current row in the cursor.
FETCH PRIOR FROM authors_cursor

-- Fetch the second row in the cursor.
FETCH ABSOLUTE 2 FROM authors_cursor

-- Fetch the row that is three rows after the current row.
FETCH RELATIVE 3 FROM authors_cursor

-- Fetch the row that is two rows prior to the current row.
FETCH RELATIVE -2 FROM authors_cursor

CLOSE authors_cursor
DEALLOCATE authors_cursor
GO

D. 使用游标更改数据
ADO、OLE DB 和 ODBC 应用程序接口 (API) 支持对结果集内应用程序所处的当前行进行更新。其基本过程如下:
将结果集的各列绑定到程序变量上。
执行查询。
执行 API 函数或方法,将应用程序定位在结果集的某一行上。
使用要更新的列的新数据值填充绑定的程序变量。
执行以下函数或方法之一插入行:
在 ADO 中,调用 Recordset 对象的 Update 方法。
在 OLE DB 中,调用 IRowsetChange 接口的 SetData 方法。
在 ODBC 中,调用带 SQL_UPDATE 选项的 SQLSetPos 函数。
使用 Transact-SQL 服务器游标时,可以使用包含 WHERE CURRENT OF 子句的 UPDATE 语句更新当前行。使用此子句所做的更改只影响游标所在行。如果游标基于某个联接,则只修改 UPDATE 语句中指定的 table_name。而不影响其它参与该游标的表。

USE Northwind
GO
DECLARE abc CURSOR FOR
SELECT CompanyName
FROM Shippers

OPEN abc
GO

FETCH NEXT FROM abc
GO

UPDATE Shippers SET CompanyName = N'Speedy Express, Inc.'
WHERE CURRENT OF abc
GO

CLOSE abc
DEALLOCATE abc
GO

时间: 2024-11-03 20:46:16

游标使用经典范例的相关文章

火箭若招大本绝非脑残昔日二老可做经典范例

北京时间7月14日,<亚利桑那共和报>透露,太阳已经做出决定买断大本的合同,菲尼克斯人支付了1000万美元,将这名前最佳防守球员剔除出球员名单.[ 延伸阅读:太阳正式买断大本钟 ] 大本老迈年高,被买断完全在情理之中.早在上赛季他就已呈现颓势,场均篮板数跌到个人职业生涯史上第三差,仅为6.5个,距离他拿到最佳防守时简直无法同日而语.而他本人也已经显得有些心灰意冷,并坦言自己已经"认真考虑是否退役". 不过星爷电影里曾有这样一句名言:即使一张卫生纸,也会有他的用途.更何况大本

【Android开发】经典范例2-仿QQ在状态栏显示登录状态的图标

    运行本实例,将显示一个用户登录界面,输入用户名(hpuacm)和密码(1111)后,单击"登录"按钮,将弹出如下图所示的选择登录状态的列表对话框, 单击代表登录状态的列表项,该对话框消失,并在屏幕的左上角显示代表登录状态的通知(如图) 过一段时间后该通知消失,同时在状态栏上显示代表该登录状态的图标(如图) 将状态栏下拉可以看到状态的详细信息(如图) 单击"更改登录状态"按钮,将显示通知列表.单击"退出"按钮,可以删除该通知. 具体实现方法

【Android开发】经典范例1-实现仿Windows7图片预览窗格效果

本实例将显示类似于windows7提供的图片预览窗格效果,单击任意一张图片,可以在右侧显示该图片的预览效果. 效果如图所示: 具体实现方法: res/layout/main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orie

【Android开发】经典范例1-在GridView中显示SD卡上的全部图片

实现一个在GridView中显示SD卡上的全部图片的实例. 在mian.xml布局文件中加入GridView组件,列数4,也就是每行显示4张图片 res/layout/main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tool

五大经典品牌营销案例赏析

回忆过去的岁月,有许多经典的营销案例让我们回味,其创意的手段让我们感叹,无论是在营销的某一环节还是整个系统过程,还是具体的策划过程,都有许多值得我们学习和借鉴的地方,无论是借势还是比附定位,无论是造势还是卖点策划,无论是产品创新还是营销传播,都值得我们去探讨分析.案例一:黄山香烟上市 二十世纪九十年代,云系烟在 中国市场上是如日中天,红塔集团的红塔山.阿诗玛等品牌香烟在内地市场更是作为高端烟草代表受到消费者广泛追捧.面对这样一个几乎绝对垄断烟草品牌,当时的安徽蚌埠卷烟厂可谓高不可攀.1993年6

DELPHI保护级类成员的应用

type TStringGridEx = class(TStringGrid); procedure TForm1.Button1Click(Sender: TObject); begin if TStringGridEx(StringGrid1).RowCount > 5 then TStringGridEx(StringGrid1).DeleteRow(5); end; 这是要在StringGrid中删除一行的代码.这个问题我搞了2个小时没有搞定,然后就搜帖子,发现这位高人的代码,简直敬佩之

漩涡中的中国首富李彦宏

■李彦宏的偶像是乔布斯,这位苹果公司的掌门人是著名的独裁管理者.在百度内部,李彦宏是不容置疑的,是神坛上的人物.但作为中国互联网市值最大公司的创始人.董事长兼CEO,李彦宏却陷入是非漩涡. ■作家们抗议百度侵权的声音未平,行业内对百度关键词要价过高的控诉又起. 内心强大的李彦宏,能在群情激愤中安静多久? □南方周末记者赵蕾苏永通方可成王刚风端发自云南丽江.北京.山西阳泉.日本东京 "如果去年互联网是大局未定,今年就是闹中取静."4月12日,2011年百度联盟峰会.百度公司创始人.董事长

PHP中 ADOdb 类库介绍(二)

ado 对查询进行缓存 上个月,我们简单地了解了ADOdb中,如何进行SELECT.INSERT和UPDATE的操作.如果你在ADOdb上是个新手,我建议先读一下上个月的那篇文章. ADOdb 还有很多更高级的特征,这个月,我们就一起来关注其中的部分内容. 数据库时常会成为应用程序效率低下的祸首.尽量减少对数据库的查询,是提高执行效率的方法之一.这,通常可以通过对整页内容进行缓存(有很多种方法来实现.比如,PEAR->Cache),或者,如果你需要做一张动态页面,并且只想让查询指令被缓存,那么,

交换技术发展方向:从二层交换到自适应业务交换

以太网交换机作为以太交换技术的物理体现,已经发生了巨大而深刻的变化.本文将与大家一起回顾交换机的发展历程,并阐述在自适应网络(@Net)时代,交换技术未来的发展方向--自适应业务交换. 以太网交换技术发展史 二层交换: 交换技术诞生与上世纪80年代,最初是多端口网桥的改进版本,目标是不断细分局域网广播域. ATM交换和路由器: 上世纪90年代中期,由于园区网和城域网的兴起,二层交换机在广播规模.地域覆盖.管理方面都存在不足,在大型局域网.园区网.城域网等环境中开始引入路由器或ATM交换机构建骨干