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语句查询的结果,以便做其他操作