我想问一下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;
答案 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
中的示例