SQL SERVER 游标的使用

xiaoxiao2021-02-28  99

首先,关于什么是游标大家可以看看这篇文章,介绍得非常详细!! 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. 最后用完要关闭与释放游标

转载请注明原文地址: https://www.6miu.com/read-27814.html

最新回复(0)