在sql的存储过程中怎样对记录进行循环?
就象在delphi中对记录循环一样?或者是for 循环
q.open;
while not q.eof do
      begin
      end

for i=0 to 5 do
    begin
    end;
在存储过程中怎样写阿?

解决方案 »

  1.   

    DECLARE cSet CURSOR FOR SELECT vId FROM SetDef 
    OPEN cSet 
    FETCH NEXT FROM cSet INTO @vId 
    WHILE @@FETCH_STATUS =0 
    BEGIN 
      EXEC('DELETE FROM '+@vId+' WHERE vId='+@vKey)
      FETCH NEXT FROM cSet INTO @vId
    END 
    CLOSE cSet 
    DEALLOCATE cSet
      

  2.   

    q.open;
    repeat
    i=1;
    q.first;
    while not q.eof do
          begin
          ...
          q.next;
          end
    inc(i);
    until i<6;
      

  3.   

    例如 從Table1中查出來,數知道Table2中
    Table1字段 Field1 ,Field2
    Table2 字段 Field3 ,Field4declare @Field1 varchar(10),@field2 int
    DECLARE Insert_cur CURSOR 
    FOR 
    SELECT  Field1, Field2 FROM Table1
    OPEN Insert_cur 
    FETCH NEXT FROM Insert_cur INTO @Field1,@field2
    WHILE @@FETCH_STATUS =0 
    BEGIN 
      insert into Table2 (Field3,Field4) select @Field1,@field2
      FETCH NEXT FROM Insert_cur INTO @Field1,@field2
    END 
    CLOSE Insert_cur 
    DEALLOCATE Insert_cur
      

  4.   

    游标处理
    declare @Field1 varchar(10),@field2 int
    DECLARE Insert_cur CURSOR 
    FOR 
    SELECT  Field1, Field2 FROM Table1
    OPEN Insert_cur 
    FETCH NEXT FROM Insert_cur INTO @Field1,@field2
    WHILE @@FETCH_STATUS =0 
    BEGIN 
      insert into Table2 (Field3,Field4) select @Field1,@field2
      FETCH NEXT FROM Insert_cur INTO @Field1,@field2
    END 
    CLOSE Insert_cur 
    DEALLOCATE Insert_cur
      

  5.   

    游标类似DELPHI中的queryDECLARE @vId VARCHAR(10)
    DECLARE cSet CURSOR FOR SELECT vId FROM SetDef --声明游标,后面为相关SQL
    OPEN cSet --打开游标
    FETCH NEXT FROM cSet INTO @vId --把游标中记录放入变量,如果字段多,则用多个变量
    WHILE @@FETCH_STATUS =0        --游标的循环状态   
    BEGIN 
      --执行相关操作,@vId可用于任意SQL
      FETCH NEXT FROM cSet INTO @vId --读下一记录
    END 
    CLOSE cSet --关闭游标
    DEALLOCATE cSet  --释放资源
      

  6.   

    SQL Server的游标在处理数据超过十万条时效率极差