好的,我在文件中找到了其他人编写的以下代码。我的问题是,这实际上会有效,因为我认为更新游标你必须在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
答案 0 :(得分:1)
你有点倒退。
如果 UPDATE
使用的是WHERE CURRENT OF
语法,那么,是的,游标需要是可更新的。但是这里没有使用这种语法。
在更新发生时,光标和更新之间的唯一关系是@cont_id
变量 - 但该变量可以以您能想象的任何方式填充。它没有以任何方式连接到光标。