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

最新文章

  1. MySQL 系列(四)主从复制、备份恢复方案生产环境实战
  2. 折腾Ubuntu下的android studio
  3. Oracle 字符串函数
  4. iOS - Xcode 常用快捷键
  5. Jmeter—2 http请求—简单的get请求
  6. 用cryptico.js实现RSA加密(应对cryptico不支持PEM)
  7. mybatis使用小记
  8. ServiceStack.Redis之IRedisClient 03_转
  9. Google Glass应用开发探索
  10. Android Studio开发RecyclerView遇到的各种问题以及解决
  11. Java字节码(.class文件)格式详解(一)
  12. Ubuntu 12.04如何从登录界面登录root
  13. iOS 小知识 - #if , #ifdef , #ifndef.
  14. java项目测试log4j
  15. 【二分】【高精度】Vijos P1472 教主的集合序列
  16. js实现页面重定位的几种方法
  17. 分享小知识:善用Group By排序
  18. visual studio 2015 warning MSB3246
  19. 配置不同环境下启用swagger,在生产环境关闭swagger
  20. PHP定义字符串的四种方式

热门文章

  1. [.Net Core] 简单使用 Mvc 内置的 Ioc
  2. 微信退款 - tp5
  3. NancyFX 第十章 身份验证
  4. html备战春招の一
  5. 如何在WordPress文本小工具中使用PHP
  6. python作业02
  7. 如何通过TortoiseGit(小乌龟)把本地项目上传到github上
  8. Linux创建普通用户以及权限的分配
  9. jmeter连接Mysql数据库测试性能初探
  10. 【MySql系列】MySql踩坑系列