一个Selcet语句获取到一个结果集,如果我们要遍历结果集,根据每一行不同的数据进行一些增删改查或赋值等操作(常用于存储过程),可以使用游标遍历。
以下例子是遍历一个表的字段名并拼接SQL实现等同于Select * from ‘表名’ 的效果。
declare @tabelName varchar(1000) declare @list varchar(1000) declare @name varchar(1000) Set @tabelName = 'SYS_Programme_Fuction' --要查询的表名 Set @list = '' -- 必须初始化 -- 声明游标 DECLARE C_Employees CURSOR FAST_FORWARD FOR --要进行循环的结果集(根据实际修改查询语句) select b.name from sysobjects a,syscolumns b where a.id=b.id and a.name = @tabelName OPEN C_Employees; -- 取第一条记录,由于上面的查询只有一个字段name,如果有多个字段,需定义多个变量,以逗号分隔 FETCH NEXT FROM C_Employees INTO @name; WHILE @@FETCH_STATUS=0 BEGIN --要进行的操作(根据实际修改) Set @list = @list + ',' + @name -- 取下一条记录 FETCH NEXT FROM C_Employees INTO @name; END -- 关闭游标 CLOSE C_Employees; -- 释放游标 DEALLOCATE C_Employees; declare @sql nvarchar(1000) set @sql='select '+right(@list,len(@list)-1)+' from ' + @tabelName exec (@sql)