SQL利用游标遍历所有数据并更新所有数据
2012-12-03 09:39
639 查看
如果对数据进行遍历循环操作,通过SQL的游标就可以实现,下面就为您详细介绍该方法,供您参考,希望对您学习SQL数据库能够有所帮助。
SQL游标的优点是可以方便从一个结果集中进行循环遍历数据在进行操作。
1、游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;
2、它还提供对基于游标位置而对表中数据进行删除或更新的能力;
3、游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。
然而游标也有缺点——复杂和低效,是游标的最大缺点,也是致使很多时候在使用存储过程中没有想到游标的主要原因。
使用游标的顺序: 声名游标、打开游标、读取数据、关闭游标、删除游标。
由于 @@FETCH_STATUS 对于在一个连接上的所有游标是全局性的,要小心使用 @@FETCH_STATUS 。在执行一条 FETCH 语句后,必须在对另一游标执行另一 FETCH 语句前测试 @@FETCH_STATUS 。在任何提取操作出现在此连接上前,@@FETCH_STATUS 的值没有定义。
例如,用户从一个游标执行一条 FETCH 语句,然后调用一个存储过程,此存储过程打开并处理另一个游标的结果。当控制从被调用的存储过程返回后,@@FETCH_STATUS 反映的是在存储过程中执行的最后的 FETCH 语句的结果,而不是在存储过程被调用之前的 FETCH 语句的结果。
SQL游标的优点是可以方便从一个结果集中进行循环遍历数据在进行操作。
1、游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;
2、它还提供对基于游标位置而对表中数据进行删除或更新的能力;
3、游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。
然而游标也有缺点——复杂和低效,是游标的最大缺点,也是致使很多时候在使用存储过程中没有想到游标的主要原因。
--将book表中的LookCount(int型)字段加上800-1000的随机整数 declare @bid int declare cur cursor read_only for select bid from dbo.Book open cur fetch next from cur into @bid while(@@fetch_status=0) begin update dbo.Book set LookCount=LookCount+cast((rand()*(1000-800)+800) as int) where bid=@bid fetch next from cur into @bid end close cur deallocate cur
使用游标的顺序: 声名游标、打开游标、读取数据、关闭游标、删除游标。
由于 @@FETCH_STATUS 对于在一个连接上的所有游标是全局性的,要小心使用 @@FETCH_STATUS 。在执行一条 FETCH 语句后,必须在对另一游标执行另一 FETCH 语句前测试 @@FETCH_STATUS 。在任何提取操作出现在此连接上前,@@FETCH_STATUS 的值没有定义。
例如,用户从一个游标执行一条 FETCH 语句,然后调用一个存储过程,此存储过程打开并处理另一个游标的结果。当控制从被调用的存储过程返回后,@@FETCH_STATUS 反映的是在存储过程中执行的最后的 FETCH 语句的结果,而不是在存储过程被调用之前的 FETCH 语句的结果。
相关文章推荐
- T_SQL利用游标遍历表记录,更新每条记录ID值
- SQL中游标使用--遍历数据逐行更新:相当于for循环
- SQL查询遍历数据方法二 [ 游标 + While循环]
- sql通过游标遍历某个数据库中所有的表,按某种需求筛选出对应的记录
- [转]sql利用游标循环,遍历表循环结果集
- 如何利用DBMS_SQL包和游标计算当前用户下所有表的行数?
- SQL 已更新或删除的行值要么不能使该行成为唯一行(sqlserver中有多行所有的列重复的数据,无法更新或删除问题)
- 游标遍历所有数据库循环执行修改数据库的sql命令
- 如何在SQLSERVER2005中利用游标更新数据
- SQL中游标的使用--遍历数据逐行更…
- 利用游标先遍历表数据,再根据循环插入数据
- sql遍历所有数据集
- 利用游标循环进行更新插入的SQL事务语句 ~
- sql更新每条数据随机——游标的用途
- sql查询所有存储过程内容-利用游标和临时表
- JS、replace 利用正则表达式 ,一次性替换SQL所有参数为数据
- SQL 已更新或删除的行值要么不能使该行成为唯一行(sqlserver中有多行所有的列重复的数据,无法更新或删除问题)
- 利用在带有游标的过程中使用 WHILE的方法取出各个门店零售的销售数据(遍历多表取出数字)
- SQL 游标的使用(更新数据)
- SQL 已更新或删除的行值要么不能使该行成为唯一行(sqlserver中有多行所有的列重复的数据,无法更新或删除问题)