没有“FOR UPDATE OF”语法问题更新游标

时间:2013-01-15 14:48:23

标签: sql syntax cursor

好的,我在文件中找到了其他人编写的以下代码。我的问题是,这实际上会有效,因为我认为更新游标你必须在MSSQL语法中的某处包含“FOR UPDATE OF”或“WHERE CURRENT OF”

set @group_id_new = (select max(group_id) + 1 from x_dc_multgroups_stage001c)

declare cur_cont cursor for
(select cont_id from x_dc_multgroups_stage002b)

open cur_cont

fetch next from cur_cont into @cont_id

while @@fetch_status = 0


begin
--print @cont_id
update  x_dc_multgroups_stage002a 
set     group_id_new = @group_id_new 
where   group_id in (select group_id from x_dc_multgroups_stage002a where cont_id = @cont_id)

set @group_id_new = @group_id_new + 1

fetch   next from cur_cont into @cont_id


end

close   cur_cont
deallocate cur_cont

1 个答案:

答案 0 :(得分:1)

你有点倒退。

如果 UPDATE使用的是WHERE CURRENT OF语法,那么,是的,游标需要是可更新的。但是这里没有使用这种语法。

在更新发生时,光标和更新之间的唯一关系是@cont_id变量 - 但该变量可以以您能想象的任何方式填充。它没有以任何方式连接到光标。