神奇的SQL游标
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 --删除游标
执行后的效果
从--个人辅助调试 这个打印辅助,我们可以了解游标的执行,如下图: