-3

さて、ファイル内に他の誰かが書いた以下のコードを見つけました。私の質問は、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
4

1 に答える 1

1

あなたは物事がやや後退しています。

UPDATEが構文を使用していた場合WHERE CURRENT OFはい、カーソルは更新可能である必要があります。しかし、その構文はここでは使用されていません。

更新が発生した時点で、カーソルと更新の間の唯一の関係は@cont_id変数ですが、その変数は想像できるどのような方法でも取り込まれている可能性があります。カーソルにはまったく接続されていません。

于 2013-01-15T15:03:17.153 に答える