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的功能吗?谢谢

解决方案 »

  1.   

    能说详细点儿吗?
    while就可以不用定义那么多变量?
      

  2.   

    十几个表每个表几十个字段
    加起来几百个字段有什么奇怪难道只能用cursor了?还是oracle方便啊
      

  3.   

    一条条数据访问本来就要用游标的。
      --把合符条件的目标权限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这个给你参考,不过变量也很多
      

  4.   

    to:hsie168518
    就当只有两三个
    for c in select a,b from d loop 
      //此处可以使用 c.a, c.b 等等 
      end loop 
    请问你在循环里面要使用a或b的你不要定义变量来代表它?
    就算你只用游标代表ID,要得到id代表的数据,你是再查一遍库?查完出来的数据要使用的话,要不要再用个变量?
      

  5.   

    [就算你只用游标代表ID,要得到id代表的数据,你是再查一遍库?查完出来的数据要使用的话,要不要再用个变量? ]我一般只用游标拷贝数据,就是把一个表中的数据拷到另一个表,新表和老表就是ID不同。可以多定义几个变量,标识清楚一点就没关系了。
      

  6.   

    我不是只拷贝数据,中间还有别的操作Anyway,thanks
      

  7.   

    1
    游标
    2
    临时表或表变量的identity列做记录指针,用循环来实现。
    3
    一些简单功能可以用递规查询变量实现,比如;
    declare @s varchar(max)
    select @s=isnull(@s+',','') + value from table
    实现value值的拼接。 当然也可在此基础上扩展。
    4
    一些特定的功能,可由xml实现,利用xpath和xflow实现遍历功能