神奇的SQL游标

本文深入探讨了SQL游标的功能及其在更新跨表数据时的应用,通过实例展示了如何使用游标逐行操作数据,实现名单表与习惯表间数据的高效同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL游标:可以对数据集中的数据进行一行一行的操作。

SQL缺点:复杂且低效。

SQL优点:游标允许应用程序对查询语句select 返回的行结果集中每一行进行相同或不同的操作(操作包括:删除、更新),而不是一次对整个结果集进行同一种操作。
实例:

我们有两张表 TEST_PERSON和TEST_HOBBY,分别为名单表和习惯表,它们通过ID=PARENT_ID关联。如下图(表中的数据比较粗糙):

现在有这么一个需求:在TEST_HOBBY中加个字段PARENT_NAME并且根据ID 把TEST_PERSON中的NAME数据刷到新字段中

用SQL游标这样写

DECLARE @ID VARCHAR(20)
DECLARE @NAME VARCHAR(50)
DECLARE CUR CURSOR   --定义游标
FOR SELECT DISTINCT P.ID ,P.NAME FROM TEST_PERSON P LEFT JOIN TEST_HOBBY H ON P.ID=H.PARENT_ID--为获得的数据集指定游标
OPEN CUR--打开游标
FETCH NEXT FROM CUR INTO @ID,@NAME--把要操作的列数据放到局部变量中
PRINT @ID+'AA'--个人辅助调试
WHILE(@@FETCH_STATUS =0)--判断是否成功获取数据
     BEGIN
     UPDATE TEST_HOBBY SET PARENT_NAME =@NAME  WHERE PARENT_ID =@ID --执行操作
     PRINT @ID+'BB'--个人辅助调试
     FETCH NEXT FROM CUR INTO @ID,@NAME--提示下一列数据的信息
     PRINT @ID+'CC'--个人辅助调试
     END
CLOSE CUR--关闭游标
DEALLOCATE CUR --删除游标

执行后的效果

--个人辅助调试 这个打印辅助,我们可以了解游标的执行,如下图:

转载于:https://www.cnblogs.com/Techlink/archive/2012/09/12/2681788.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值