随笔002:游标 语法剪辑

一、使用游标的情况

  • 定位结果集的某一行;
  • 从结果集中搜索某一行或几行的数据;
  • 对结果集的当前行进行数据修改。

二、游标工作流程(五步)

  1. 定义游标变量,声明游标存储的结果集,结构简记 DECLARE ...CURSOR FOR...
  2. 打开游标,结构简记OPEN ...
  3. 通过循环从游标里取得数据并进行处理,结构简记FETCT...FROM ... INTO ...
  4. 关闭游标,结构简记CLOSE ...
  5. 删除游标,结构简记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 游标名

运行结果:

posted on 2013-08-11 00:37  nvrrgup  阅读(265)  评论(0)    收藏  举报

导航