随笔002:游标 语法剪辑
一、使用游标的情况
- 定位结果集的某一行;
- 从结果集中搜索某一行或几行的数据;
- 对结果集的当前行进行数据修改。
二、游标工作流程(五步)
- 定义游标变量,声明游标存储的结果集,结构简记 DECLARE ...CURSOR FOR...
- 打开游标,结构简记OPEN ...
- 通过循环从游标里取得数据并进行处理,结构简记FETCT...FROM ... INTO ...
- 关闭游标,结构简记CLOSE ...
- 删除游标,结构简记DEALLOCATE ...
PS :@@FETCH_STATUS 指示最后一次移动游标读取记录的操作是否成功,成功则为0;
@@CURSOR_ROWS 结果集存入到游标中的记录条数。
三、示例
SQL SERVER 示例数据库Northwind表Northwind内容如下:
USE Northwind
-- 定义游标变量 PS 游标只有定义为可回滚的,才可从后面读取前面的记录
DECLARE 游标名 CURSOR SCROLL FOR
SELECT CategoryName,Description FROM dbo.Categories
-- 打开游标
OPEN 游标名
DECLARE @CategoryName NVARCHAR(15),@Description NVARCHAR(MAX)
-- 移动游标指针
FETCH NEXT FROM 游标名 INTO @CategoryName,@Description
-- 循环读取游标中的数据
WHILE (@@FETCH_STATUS = 0)
BEGIN
PRINT @CategoryName;
FETCH NEXT FROM 游标名 INTO @CategoryName,@Description
END
-- 读取游标中第一条记录
PRINT N'游标第一条记录'
FETCH FIRST FROM 游标名 INTO @CategoryName,@Description
PRINT @CategoryName
-- 读取游标中最后一条记录
PRINT N'游标最后一条记录'
FETCH LAST FROM 游标名 INTO @CategoryName,@Description
PRINT @CategoryName
-- 读取游标中第三条记录
PRINT N'游标第三条记录'
FETCH ABSOLUTE 3 FROM 游标名 INTO @CategoryName,@Description
PRINT @CategoryName
-- 读取游标中第五条记录
PRINT N'游标第五条记录'
FETCH RELATIVE 2 FROM 游标名 INTO @CategoryName,@Description
PRINT @CategoryName
-- 通过当前游标指针修改表中数据
UPDATE Categories SET CategoryName = CategoryName+N'追'
WHERE CURRENT OF 游标名
-- 修改后的数据
FETCH RELATIVE 0 FROM 游标名 INTO @CategoryName,@Description
PRINT @CategoryName
-- 关闭游标
CLOSE 游标名
-- 删除游标
DEALLOCATE 游标名
运行结果:
浙公网安备 33010602011771号