SQL SERVER 游标的使用

4 篇文章 1 订阅
1 篇文章 0 订阅

首先,关于什么是游标大家可以看看这篇文章,介绍得非常详细!!
SQL Server基础之游标


下面是我自己的应用场景……

有个需求,需要把数据库表里面某一个字段的值设为随机不重复的值。

表是这样的:

这里写图片描述

这是一个爬虫抓取网址表。其中 CatchOrder 这一列就是要修改的列。CatchOrder 表示的是抓取顺序,本来这个值是等于 WebSiteId 的值的。新需求就是要把这一列的值修改为有限值范围内的随机不重复的值。
于是我的思路是把它改成随机查找出的 WebSiteId 值【用 order by NEWID() 实现】,这样就肯定能保证不会重复了。【因为 WebSiteId 列是这个表的唯一索引。】

下面就直接上代码了:

declare @websiteId int=-1
declare @catchOrder int=-1

-- 声明游标并指定值
declare unorder_catchOrder_cursor cursor
for 
select WebSiteId from
dbo.Reader_WebSite
order by NEWID();   -- 随机查出WebSiteId作为要修改的CatchOrder的新顺序

declare order_websiteId_cursor cursor
for 
select WebSiteId from
dbo.Reader_WebSite;     -- 按顺序查出WebSiteId值用于定位

-- 打开游标
open unorder_catchOrder_cursor;
open order_websiteId_cursor;

-- 获取游标值
fetch next from unorder_catchOrder_cursor into @catchOrder;
fetch next from order_websiteId_cursor into @websiteId;

while @@FETCH_STATUS=0  -- 判断fetch语句是否执行成功
begin
    update dbo.Reader_WebSite set CatchOrder=@catchOrder where WebSiteId=@websiteId; -- 修改值

    -- 获取下一个游标值
    fetch next from unorder_catchOrder_cursor into @catchOrder;
    fetch next from order_websiteId_cursor into @websiteId;
end

-- 关闭游标
close unorder_catchOrder_cursor;
close order_websiteId_cursor;

-- 释放游标 
deallocate unorder_catchOrder_cursor;
deallocate order_websiteId_cursor;

总结一下就是几个关键点:
1. 声明游标
2. 指定游标结果集(查询出的结果表)
3. 打开游标
4. 使用游标(通过 fetch next from cursor_name 获取值)
5. 循环时可以使用 @@FETCH_STATUS=0 判断是否已经到达了最后一项
6. 最后用完要关闭与释放游标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值