CURSOR函数在SQL Server中等效

时间:2013-06-11 18:06:35

标签: sql sql-server oracle cursor batch-processing

我想问一下SQL Server中的代码等价

我正在开展一个项目,由于数据库迁移,我们将把unix批次转换为windows批次。因为我使用的是shell脚本和oracle的东西,所以我很难在Windows端工作。

我的问题是关于oracle sql使用的CURSOR。

有人可以帮我转换下面的示例查询

sampleanimal.sql

declare cursor getGM is
select dog as d, cat as c, fish as f
  from animals

begin
  for dr in getGM loop

    UPDATE zoo
      SET dogs = dr.d
          cats = dr.c
          fishes = dr.f
      ;

  end loop;
end;
/

commit;

quit; 

2 个答案:

答案 0 :(得分:2)

实际上,在这种情况下你不需要使用游标。试试这样的事情 -

UPDATE z
SET 
      dogs = a.dog
    , cats = a.cat
    , fishes = a.fish
FROM zoo z
JOIN animals a ON z.id = a.id

答案 1 :(得分:1)

可以有更高效或更轻松的方式,我只是写了没有测试

DECLARE @d nvarchar(10);
DECLARE @c nvarchar(10);
DECLARE @f nvarchar(10);

DECLARE getGM CURSOR LOCAL FORWARD_ONLY READ_ONLY FOR
select dog as d, cat as c, fish as f from animals

OPEN getGM
FETCH NEXT FROM getGM INTO @d, @c, @f

WHILE @@FETCH_STATUS = 0
Begin
UPDATE zoo
      SET dogs = @d
          cats = @c
          fishes = @f

FETCH NEXT FROM getGM INTO @d, @c, @f
End

CLOSE getGM
DEALLOCATE getGM

您可以查看msdn

中的示例