SQLSERVER游标的使用

SQLSERVER游标的使用,SQLSERVER游标应用场景……

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

表是这样的:

 

 

这是一个爬虫抓取网址表。其中 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. 最后用完要关闭与释放游标

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐