神奇的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 --删除游标

执行后的效果

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

posted on 2012-09-12 14:57  妖叨叨  阅读(463)  评论(0编辑  收藏  举报

导航