游标的嵌套以及临时表使用

1)游标的嵌套使用:

DECLARE CUR_1 CURSOR--第一层游标声明

FOR SELECT C_1,C_2 FROM TABLENAME

OPEN CUR_1

FETCH NEXT FROM CUR_1 INTO @C_1,@C_2

WHILE @@FETCH_STATUS=0

BEGIN

  DECLARE CUR_2 CURSOR--第二层游标声明

  FOR SELECT A_1,A_2 FROM TABLENAME

  OPEN CUR_2

  FETCH NEXT FROM CUR_2 INTO @C_1,@C_2

  WHILE @@FETCH_STATUS=0

  BEGIN

     --语句--

     FETCH NEXT FROM CUR_2 INTO @A_1,@A_2--二层循环

  END

  CLOSE CUR_2

  DEALLOCATE CUR_2

FETCH NEXT FROM CUR_1 INTO @C_1,@C_2--一层循环  

END

CLOSE CUR_1

DEALLOCATE CUR_1

定义游标时遇到的问题

declare cur_temp_2 cursor for (

            select ''''+PAYSUBJECTREF.SUBJECTNAME+':''+'+'convert(varchar,ISNULL(dbo.gsv('+PAYSUBJECTREF.REFCOLNAME+',rcbval),0)) '  from PAYSUBJECTREF,PAYACCOUNTMODESUBJECT

            where PAYSUBJECTREF.SUBJECTID=PAYACCOUNTMODESUBJECT.PAYROLLSUBJECTID

            and ACCOUNTPATTERNID='c8dc9f2b-deac-4a6c-80f6-852a4fea0e2b'

            ORDER BY PAYSUBJECTREF.REFCOLNAME asc)

会出现:关键字'ORDER' 附近有语法错误。

将语句改成真确如下:

declare cur_temp_2 cursor for

            select ''''+PAYSUBJECTREF.SUBJECTNAME+':''+'+'convert(varchar,ISNULL(dbo.gsv('+PAYSUBJECTREF.REFCOLNAME+',rcbval),0)) '  from PAYSUBJECTREF,PAYACCOUNTMODESUBJECT

            where PAYSUBJECTREF.SUBJECTID=PAYACCOUNTMODESUBJECT.PAYROLLSUBJECTID

            and ACCOUNTPATTERNID='c8dc9f2b-deac-4a6c-80f6-852a4fea0e2b'

            ORDER BY PAYSUBJECTREF.REFCOLNAME asc

不过加括号与不加括号的区别和影响暂时还不清楚

2)临时表的使用

临时表

SQL Server 支持临时表。临时表就是那些名称以井号 (#) 开头的表。

临时表有两种类型:

本地临时表

以一个井号 (#) 开头的那些表名。只有在创建本地临时表的连接上才能看到这些表。

全局临时表

以两个井号 (##) 开头的那些表名。在所有连接上都能看到全局临时表。

在写sp时运用灵活运用临时表可以存放复杂sql语句查询的结果,以便做其他操作

posted @ 2015-08-10 10:42  zhuyu528  阅读(441)  评论(0编辑  收藏  举报