SQL server 游标

原文章地址:https://blog.csdn.net/love2zq/article/details/108511291

声明游标:说明游标的时候并不执行select语句。

declare <游标名> cursor for <select语句>;

打开游标:打开游标实际上是执行相应的select语句,把查询结果读取到缓冲区中。这时候游标处于活动状态,指针指向查询结果集的第一条纪录。

open <游标名>;

推进游标指针并读取当前纪录:

用fetch语句把游标指针向前推进一条纪录,同时将缓冲区中的当前纪录读取出来送到变量中。fetch语句通常用在一个循环结构体中,通过循环执行fetch语句逐条取出结果集中的行进行处理。现在好多数据库中,还允许任意方向任意步长易懂游标指针,而不仅仅是把游标指针向前推进一行了。
fetch <游标名> into <变量1>,<变量2>...

关闭游标:

用close语句关闭游标,释放结果集占用的缓冲区及其他资源。游标关闭后,就不再和原来的查询结果集相联系。但游标可以再次打开,与新的查询结果相联系。
close <游标名>;

-- 声明游标
	DECLARE Indexs CURSOR FAST_FORWARD FOR
		SELECT *
		FROM #Temp_Indexs
    ---游标遍历临时表获取主键名
	OPEN Indexs;
	-- 取第一条记录
	FETCH NEXT FROM Indexs INTO @Index;
    
	WHILE @@FETCH_STATUS=0
	BEGIN
		If @ICount = 0         ---当 If @ICount = 0 时 只有一条数据取 join 条件为 on a.x=b.x
			BEGIN 
				Set @ConditionSql = ' d1.' + @Index + '= d3.' + @Index
				Set @TypeSql = 'd3.' + @Index
			END
		Else 
			BEGIN Set @ConditionSql = ' AND d1.' + @Index + '= d3.' + @Index END
                               ---当 If @ICount <> 0 时 取第一条数据取 join 条件为 on a.x=b.x 第二条是为 and a.y=b.y  
		-- 取下一条记录
		FETCH NEXT FROM Indexs INTO @Index;

		-- 操作
		Set @ICount = @ICount +1  --计数,方便判断取第几条数据
	END

	-- 关闭游标
	CLOSE Indexs;

	-- 释放游标
	DEALLOCATE Indexs

posted on   唯一的Dove  阅读(171)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示