游标使用经典范例

简介: A.在简单的游标中使用 FETCH获取记录下例为 authors 表中姓以字母 B 开头的行声明了一个简单的游标,并使用 FETCH NEXT 逐个提取这些行。

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

目录
相关文章
|
4月前
|
算法
‘/’ 和 ‘%’ 在编程中的作用【附加练习题】
‘/’ 和 ‘%’ 在编程中的作用【附加练习题】
|
10月前
|
C#
C#的基本语法结构学习案例详解
C#的基本语法结构学习案例详解
48 0
|
4月前
|
存储 SQL 人工智能
01-PostgreSQL 存储过程的基本介绍以及入门(基本结构、声明和赋值、控制结构)(下)
01-PostgreSQL 存储过程的基本介绍以及入门(基本结构、声明和赋值、控制结构)
|
存储 SQL Oracle
Oracle存储过程中如何使用数组(附范例)
Oracle存储过程中如何使用数组(附范例)
|
4月前
|
存储 SQL 关系型数据库
01-PostgreSQL 存储过程的基本介绍以及入门(基本结构、声明和赋值、控制结构)(上)
01-PostgreSQL 存储过程的基本介绍以及入门(基本结构、声明和赋值、控制结构)
|
4月前
|
C++ 开发者
if语句的一般形式及其在编程中的应用
在编程中,if语句是一种基本的控制流语句,它允许程序根据特定的条件来决定执行哪一段代码。if语句的一般形式非常直观,使得开发者能够轻松地根据条件进行逻辑判断。
53 0
|
存储 SQL 安全
15天学习MySQL计划-存储过程变量判断循环游标函数触发器(进阶篇)-第九天(下)
15天学习MySQL计划-存储过程变量判断循环游标函数触发器(进阶篇)-第九天
138 0
|
存储 SQL 关系型数据库
15天学习MySQL计划-存储过程变量判断循环游标函数触发器(进阶篇)-第九天(上)
15天学习MySQL计划-存储过程变量判断循环游标函数触发器(进阶篇)-第九天
133 0
|
算法 数据库 C++
c++基础知识——常规语句和STL
c++基础知识——常规语句和STL
115 0
|
关系型数据库 MySQL
【MySQL】数据库函数通关教程上篇(聚合、数学、字符串、日期、控制流函数)(下)
文章目录 写在前面 1 聚合函数 1.1 GROUP_CONCAT() 1.2 其他聚合函数 2 数学函数 3 字符串函数 4 日期函数 4.1 常见日期函数与使用 4.2 日期格式 5 控制流函数 5.1 if逻辑判断语句 5.2 case when语句
【MySQL】数据库函数通关教程上篇(聚合、数学、字符串、日期、控制流函数)(下)