Sql Server系列:游标

1. 游标简介

  游标是一种处理数据的方法,主要用于存储过程、触发器和Transact-SQL脚本中。SELECT语句返回的是一个结果集,游标能够从包含多条数据记录的结果集中每次提取一条记录。

  游标的特点:

  ◊ 允许对由SELECT查询语句返回的行集中的每一行执行相同或者不同的操作,而不是对整个集合执行同一个操作。

  ◊ 提供对基于游标位置的表中的行进行删除和更新。

2. 游标的基本操作

2.1 声明游标

  声明游标语法:

ISO Syntax
DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR 
     FOR select_statement 
     [ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]
[;]
Transact-SQL Extended Syntax
DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ] 
     [ FORWARD_ONLY | SCROLL ] 
     [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] 
     [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] 
     [ TYPE_WARNING ] 
     FOR select_statement 
     [ FOR UPDATE [ OF column_name [ ,...n ] ] ]
[;]

2.2 打开游标

  在使用游标之前,必须打开游标。

  打开游标的语法格式:

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }

2.3 读取游标中的数据

  打开游标之后,可以读取游标中的数据。FETCH用来读取游标中的某一行数据。

  FETCH语句的语法格式:

FETCH 
          [ [ NEXT | PRIOR | FIRST | LAST 
                    | ABSOLUTE { n | @nvar } 
                    | RELATIVE { n | @nvar } 
               ] 
               FROM 
          ] 
{ { [ GLOBAL ] cursor_name } | @cursor_variable_name } 
[ INTO @variable_name [ ,...n ] ] 

2.4 关闭游标

  在不使用游标的时候,可以将其关闭,以释放游标所占用的服务器资源。

  关闭游标CLOSE语法格式:

CLOSE { { [ GLOBAL ] cursor_name } | cursor_variable_name }

2.5 释放游标

  游标操作的结果集空间虽然被释放了,但是游标结构本身也会占用一定的资源,所以在使用完游标之后,为了收回被游标占用的资源,应该讲游标释放。

  释放游标DEALLOCATE语法格式:

DEALLOCATE { { [ GLOBAL ] cursor_name } | @cursor_variable_name }

3. 游标应用

3.1 使用游标变量

DECLARE @CUR_Product CURSOR                        -- 声明游标变量

DECLARE CUR_Product CURSOR FOR                     -- 创建游标
SELECT [ProductID],[ProductName] FROM [dbo].[Product]

OPEN CUR_Product                                   -- 打开游标
SET @CUR_Product = CUR_Product                     -- 为游标变量赋值

FETCH NEXT FROM @CUR_Product                       -- 从游标变量中读取值
WHILE @@FETCH_STATUS = 0                           -- 判断FETCH语句是否获取到记录
    BEGIN
        FETCH NEXT FROM @CUR_Product               -- 读取游标变量中的数据
    END
CLOSE @CUR_Product                                 -- 关闭游标
DEALLOCATE @CUR_Product                            -- 释放游标

3.2 使用游标为变量赋值

DECLARE @ProductID INT

DECLARE CUR_Product CURSOR FAST_FORWARD READ_ONLY FOR
SELECT [ProductID] FROM [dbo].[Product]
ORDER BY [ProductID] DESC

OPEN CUR_Product
FETCH NEXT FROM CUR_Product INTO @ProductID
WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT @ProductID
        FETCH NEXT FROM CUR_Product INTO @ProductID
    END
CLOSE CUR_Product
DEALLOCATE CUR_Product
DECLARE @ProductID INT
DECLARE @ProductName VARCHAR(50)

DECLARE CUR_Product CURSOR FAST_FORWARD READ_ONLY FOR
SELECT [ProductID],[ProductName] FROM [dbo].[Product]

OPEN CUR_Product
FETCH NEXT FROM CUR_Product INTO @ProductID,@ProductName
WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT CONVERT(VARCHAR, @ProductID) + ' ' + @ProductName
        FETCH NEXT FROM CUR_Product INTO @ProductID,@ProductName
    END
CLOSE CUR_Product
DEALLOCATE CUR_Product

转载于:https://www.cnblogs.com/libingql/p/4165359.html

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值