3

我想询问有关 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; 
4

2 回答 2

2

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

UPDATE z
SET 
      dogs = a.dog
    , cats = a.cat
    , fishes = a.fish
FROM zoo z
JOIN animals a ON z.id = a.id
于 2013-06-12T06:24:26.707 回答
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中的示例

于 2013-06-11T18:46:31.453 回答