45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:使用游标经典范例大全

使用游标经典范例大全

2016-09-06 16:22:11 来源:www.45fan.com 【

使用游标经典范例大全

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

 

本文地址:http://www.45fan.com/a/question/73322.html
Tags: 经典 范例 游标
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部