SQL中的循环、for循环、游标

原文:SQL中的循环、for循环、游标

我们使用SQL语句处理数据时,可能会碰到一些需要循环遍历某个表并对其进行相应的操作(添加、修改、删除),这时我们就需要用到咱们在编程中常常用的for或foreach,但是在SQL中写循环往往显得那么吃力,翻遍网上的资料,找不到几个正确的并能执行的循环处理数据的方法,在这里,我来给大家分享一下!

要SQL中写类似for循环,我这里使用的是SQL中的游标来实现,当然SQL中也有for loop、while do等,我这里仅以使用游标方式来进行示例,其它的方式大家有兴趣可以研究一下,成功的同学可以在下面回复一下并把代码贴出来,与大家分享!

闲话少说,上示例:

1. 利用游标循环更新、删除MemberAccount表中的数据

DECLARE My_Cursor CURSOR --定义游标FOR (SELECT * FROM dbo.MemberAccount) --查出需要的集合放到游标中OPEN My_Cursor; --打开游标FETCH NEXT FROM My_Cursor ; --读取第一行数据WHILE @@FETCH_STATUS = 0BEGIN--UPDATE dbo.MemberAccount SET UserName = UserName + 'A' WHERE CURRENT OF My_Cursor; --更新        --DELETE FROM dbo.MemberAccount WHERE CURRENT OF My_Cursor; --删除        FETCH NEXT FROM My_Cursor; --读取下一行数据    ENDCLOSE My_Cursor; --关闭游标DEALLOCATE My_Cursor; --释放游标GO

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 = 0BEGINPRINT @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变量中)    ENDCLOSE My_Cursor; --关闭游标DEALLOCATE My_Cursor; --释放游标GO

上面的两个例子应该可以解决我们在SQL中使用循环的所有需求,如果不能满足,自己可以根据以上两个示例进行扩展,希望能帮各位解决一些类似的问题。

时间: 2024-10-04 05:33:50

SQL中的循环、for循环、游标的相关文章

如何在ppt中设置幻灯片定时循环播放

  在ppt中设置幻灯片定时循环播放的方法: 先打开你需要设置的PPT,我这里直接制作一个新的PPT.我需要一个图片的PPT放映,就直接插入图片了. 然后在工具栏里找到"动画"选项卡,在右边"换片方式"那里找到"在此之后自动设置动画效果:",在框里输入幻灯片切换的时间,我这里输入了20秒.这里设置的是一张幻灯片的,要想全部都以20秒一张放映的话要记得在旁边的"全部应用"点一下. 上面是设置每一张幻灯片放映的切换时间,到最后一张

Lua中的repeat...until循环语句使用教程

  这篇文章主要介绍了Lua中的repeat...until循环语句使用教程,是Lua入门学习中的基础教程,需要的朋友可以参考下 与for和while循环不同,在循环的顶部测试循环条件,Lua编程语言的repeat...until 循环检查循环底部的状态. repeat...until 循环类似于while循环,不同的是do ... while循环是保证至少执行一次. 语法 Lua编程语言repeat...until循环的语法是: 代码如下: repeat statement(s) until(

ajax-js中for循环每次循环如何暂停一秒后执行

问题描述 js中for循环每次循环如何暂停一秒后执行 大神们帮我看一下我写的这段代码: //人员授权的全增功能 function alladdroleshouquanusers() { var rows = partid3.getSelecteds(); for(var i=0;i<rows.length;i++) { var sendData = nui.encode({'userid':rows[i].OPERATOR_ID'prPartId':plPartId3}); nui.ajax (

关于jsp中连接数据库查询并循环遍历的问题

问题描述 关于jsp中连接数据库查询并循环遍历的问题 String all="select sShopCode,sum(iNumb) as iNumbHj,sum (rMoney) as rMoneyHj from [Data_ShopDailyBill_View] where (dDjDate>='"+qishiriqi+"' and dDjDate<='"+jiezhiriqi+"') group by sShopCode"; S

javascript-js中两个for循环之间的传值问题

问题描述 js中两个for循环之间的传值问题 假设有两个for循环 var data=0; for(var a=0;a<9;a++){ data+=a; } 那么我在第二个for循环中怎么取得第一个for循环的值 for(var b=0;b<9;b++){ alert(data); data+=b; } 在第二个for循环中alert出来的都是0. 解决方案 两个循环在一个函数中么?直接写应该是可以的. 如果不在一个函数,第一个的data写在函数外面,定义成全局的. 解决方案二: 如果你是想第

java-Java中递归快还是循环快?

问题描述 Java中递归快还是循环快? Java中递归快还是循环快? 还是有什么适用情况? 例如求100万的阶乘 解决方案 数据小的话用递归,数据大还是用循坏吧,毕竟递归太消耗内存 解决方案二: 这个要做性能测试,代码会可能被优化,所以递归,循环都可能有优化. 解决方案三: 循环快,逻辑简单些. 解决方案四: 一般来说循环都比递归要快点. 解决方案五: 这个的测试一下,但是我觉得是递归简单. 解决方案六: 一般解决同一个问题最好选择循环,递归比较消耗内存 解决方案七: 原则上能用循环解决的不用递

Python中条件选择和循环语句使用方法介绍_python

同C语言.Java一样,Python中也存在条件选择和循环语句,其风格和C语言.java的很类似,但是在写法和用法上还是有一些区别.今天就让我们一起来了解一下. 一.条件选择语句 Python中条件选择语句的关键字为:if .elif .else这三个.其基本形式如下: 复制代码 代码如下: if condition: block elif condition: block ... else block 其中elif和else语句块是可选的.对于if和elif只有condition为True时,

SQL Server 树形表非循环递归查询的实例详解_MsSql

很多人可能想要查询整个树形表关联的内容都会通过循环递归来查...事实上在微软在SQL2005或以上版本就能用别的语法进行查询,下面是示例. --通过子节点查询父节点 WITH TREE AS( SELECT * FROM Areas WHERE id = 6 -- 要查询的子 id UNION ALL SELECT Areas.* FROM Areas, TREE WHERE TREE.PId = Areas.Id ) SELECT Area FROM TREE --通过父节点查询子节点 WIT

java中两个for循环的区别

问题描述 java中一直在用for循环,但一直没弄清两个for循环的区别,今天看到个小列子,才恍然大悟publicclassTest{publicstaticvoidmain(String[]args){Randomrandom=newRandom(47);String[]strArray=newString[random.nextInt(20)];for(Strings:strArray){s="5555";}System.out.println("第一个for循环的结果是