Oracle里面有一个
for c in select a,b from c loop
//此处可以使用 c.a, c.b 等等
end loop这样用比游标的好处是不用再定义若干个变量供fetch into因为我要操作的记录集还有字段比较多,要是用fetch cursor into @a, @b, @c,.....//这里可能要几百个变量了SQL Server有类似上面说的Oracle的功能吗?谢谢
for c in select a,b from c loop
//此处可以使用 c.a, c.b 等等
end loop这样用比游标的好处是不用再定义若干个变量供fetch into因为我要操作的记录集还有字段比较多,要是用fetch cursor into @a, @b, @c,.....//这里可能要几百个变量了SQL Server有类似上面说的Oracle的功能吗?谢谢
while就可以不用定义那么多变量?
加起来几百个字段有什么奇怪难道只能用cursor了?还是oracle方便啊
--把合符条件的目标权限Id加载到一个临时表变量中
DECLARE @tbTargetPermissions table(IndexId int IDENTITY (0, 1) NOT NULL PRIMARY KEY, TargetPermissionId uniqueidentifier NOT NULL)
INSERT INTO @tbTargetPermissions
SELECT [TargetPermissionId]
FROM [ps_RolePermissions]
WHERE [TargetId] = @TargetId AND [RoleId] = @RoleId DECLARE @MaxIndexId int;
SELECT @MaxIndexId = MAX([IndexId]) FROM @tbTargetPermissions; --计算最大记录序号,用于遍历列表 WHILE @MaxIndexId > -1
BEGIN
DECLARE @TargetPermissionId uniqueidentifier;
SELECT @TargetPermissionId = [TargetPermissionId] FROM @tbTargetPermissions WHERE [IndexId] = @MaxIndexId; EXEC ps_TargetPermissionEntity_Select @TargetPermissionId; --删除最大记录项,重新判断记录项是否大于-1,以此判断是否遍历完列表
DELETE @tbTargetPermissions WHERE [IndexId] = @MaxIndexId;
SELECT @MaxIndexId = MAX([IndexId]) FROM @tbTargetPermissions
--SELECT @MaxIndexId--测试(倒序)
END这个给你参考,不过变量也很多
就当只有两三个
for c in select a,b from d loop
//此处可以使用 c.a, c.b 等等
end loop
请问你在循环里面要使用a或b的你不要定义变量来代表它?
就算你只用游标代表ID,要得到id代表的数据,你是再查一遍库?查完出来的数据要使用的话,要不要再用个变量?
游标
2
临时表或表变量的identity列做记录指针,用循环来实现。
3
一些简单功能可以用递规查询变量实现,比如;
declare @s varchar(max)
select @s=isnull(@s+',','') + value from table
实现value值的拼接。 当然也可在此基础上扩展。
4
一些特定的功能,可由xml实现,利用xpath和xflow实现遍历功能