循环逐条修改或者删除数据(游标)
2014-01-21 09:28
169 查看
/*人工审核表*/
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT * FROM AMP_TBManualValid where collecttime>'2013-11-01 00:00:00.000' and collecttime <'2013-11-30 00:00:00.000') --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor ; --读取第一行数据
WHILE @@FETCH_STATUS = 0
BEGIN
--UPDATE AMP_TBManualValid SET collecttime = UserName + 'A' WHERE CURRENT OF My_Cursor; --更新
FETCH NEXT FROM My_Cursor; --读取下一行数据
END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
GO
/*自动审核表 */
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT * FROM AMP_TBAutoValid where collecttime>'2013-11-01 00:00:00.000' and collecttime <'2013-11-30 00:00:00.000') --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor ; --读取第一行数据
WHILE @@FETCH_STATUS = 0
BEGIN
--UPDATE AMP_TBAutoValid SET collecttime = UserName + 'A' WHERE CURRENT OF My_Cursor; --更新
--DELETE FROM dbo.MemberAccount WHERE CURRENT OF My_Cursor; --删除
FETCH NEXT FROM My_Cursor; --读取下一行数据
END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
我们使用SQL语句处理数据时,可能会碰到一些需要循环遍历某个表并对其进行相应的操作(添加、修改、删除),这时我们就需要用到咱们在编程中常常用的for或foreach,但是在SQL中写循环往往显得那么吃力,翻遍网上的资料,找不到几个正确的并能执行的循环处理数据的方法,在这里,我来给大家分享一下!
要SQL中写类似for循环,我这里使用的是SQL中的游标来实现,当然SQL中也有for loop、while do等,我这里仅以使用游标方式来进行示例,其它的方式大家有兴趣可以研究一下,成功的同学可以在下面回复一下并把代码贴出来,与大家分享!
闲话少说,上示例:
1. 利用游标循环更新、删除MemberAccount表中的数据
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码
2. 利用游标循环更新MemberService表中的数据(更新每个用户所购买服务的时间)
上面的两个例子应该可以解决我们在SQL中使用循环的所有需求,如果不能满足,自己可以根据以上两个示例进行扩展,希望能帮各位解决一些类似的问题。
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT * FROM AMP_TBManualValid where collecttime>'2013-11-01 00:00:00.000' and collecttime <'2013-11-30 00:00:00.000') --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor ; --读取第一行数据
WHILE @@FETCH_STATUS = 0
BEGIN
--UPDATE AMP_TBManualValid SET collecttime = UserName + 'A' WHERE CURRENT OF My_Cursor; --更新
FETCH NEXT FROM My_Cursor; --读取下一行数据
END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
GO
/*自动审核表 */
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT * FROM AMP_TBAutoValid where collecttime>'2013-11-01 00:00:00.000' and collecttime <'2013-11-30 00:00:00.000') --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor ; --读取第一行数据
WHILE @@FETCH_STATUS = 0
BEGIN
--UPDATE AMP_TBAutoValid SET collecttime = UserName + 'A' WHERE CURRENT OF My_Cursor; --更新
--DELETE FROM dbo.MemberAccount WHERE CURRENT OF My_Cursor; --删除
FETCH NEXT FROM My_Cursor; --读取下一行数据
END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
我们使用SQL语句处理数据时,可能会碰到一些需要循环遍历某个表并对其进行相应的操作(添加、修改、删除),这时我们就需要用到咱们在编程中常常用的for或foreach,但是在SQL中写循环往往显得那么吃力,翻遍网上的资料,找不到几个正确的并能执行的循环处理数据的方法,在这里,我来给大家分享一下!
要SQL中写类似for循环,我这里使用的是SQL中的游标来实现,当然SQL中也有for loop、while do等,我这里仅以使用游标方式来进行示例,其它的方式大家有兴趣可以研究一下,成功的同学可以在下面回复一下并把代码贴出来,与大家分享!
闲话少说,上示例:
1. 利用游标循环更新、删除MemberAccount表中的数据
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码
2. 利用游标循环更新MemberService表中的数据(更新每个用户所购买服务的时间)
DECLARE @UserId varchar(50) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT UserId FROM dbo.MemberAccount) --查出需要的集合放到游标中 OPEN My_Cursor; --打开游标 FETCH NEXT FROM My_Cursor INTO @UserId; --读取第一行数据(将MemberAccount表中的UserId放到@UserId变量中) WHILE @@FETCH_STATUS = 0 BEGIN PRINT @UserId; --打印数据(打印MemberAccount表中的UserId) UPDATE dbo.MemberService SET ServiceTime = DATEADD(Month, 6, getdate()) WHERE UserId = @UserId; --更新数据 FETCH NEXT FROM My_Cursor INTO @UserId; --读取下一行数据(将MemberAccount表中的UserId放到@UserId变量中) END CLOSE My_Cursor; --关闭游标 DEALLOCATE My_Cursor; --释放游标 GO
上面的两个例子应该可以解决我们在SQL中使用循环的所有需求,如果不能满足,自己可以根据以上两个示例进行扩展,希望能帮各位解决一些类似的问题。
相关文章推荐
- 使用游标实现循环,修改数据,删除数据
- 利用游标修改、删除数据
- Oracle 使用游标修改或删除数据
- 在ORACLE中给已有数据的表增加、修改、删除一个字段(或一个列)或者多个字段(或多个列)的问题
- oracle 游标循环删除表数据 sql
- [Oracle]Oracle数据库数据被修改或者删除恢复数据
- JDBC对数据进行插入,更新或者是删除之后得到修改或者插入的那条记录的主键值
- hiberante中因为缓存机制造成新存或者修改的数据查不到的解决方法
- thinkphp点击删除,或者修改,附带id 跳转到相应的页面的js 代码
- PHP学习(三)修改和删除数据
- 数据在后台修改 删除 更新 正确代码(共享)
- 循环list删除相同的数据
- sql 循环各表,删除数据 动态SQL语句
- 使用map来进行票数统计工作,循环输入多个人名,作为key存储到map中,对应的value就是该人获得的票数(即重复输入的次数),当重复输入时,需要对相应的数据进行修改。最红输quit结束循环,打印
- javascript 常见数组操作( 1、数组整体元素修改 2、 数组筛选 3、jquery 元素转数组 4、获取两个数组中相同部分或者不同部分 5、数组去重并倒序排序 6、数组排序 7、数组截取slice 8、数组插入、删除splice(需明确位置) 9、数组遍历 10、jQuery根据元素值删除数组元素的方)
- Oracle12C--修改游标数据(三十七)
- 修改设置语言选项,删除 [Developer]Accented English或者增加其他自己喜欢的语种
- 比较两个DataTable数据(结构相同),返回新增的,删除的,修改前的,修改后的 DataTable
- Java读取json文件并对json数据进行读取、添加、删除与修改操作
- phalcon: 当删除循环删除一组数据,需要判断影响的行affectedRows