2013-01-15 23 views
-3

好的我發現下面的代碼是由其他人在文件中寫的。我的問題是,我想與更新光標,你必須有「FOR UPDATE OF」或「WHERE CURRENT OF」的地方在語法MSSQL更新沒有「FOR UPDATE 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

但是,遊標未被更新。它是如何工作的?我看不出爲什麼不,但你有機會知道。我們沒有你的模式或數據。 – Jodrell

+0

我只是以爲你不能使用更新遊標,而無需在代碼中添加FOR UPDATE OF ..我不確定! – Callum

+0

哦,好吧謝謝你達米安! :) – Callum

回答

1

你有事情稍微向後將在實際工作。

如果UPDATE正在使用WHERE CURRENT OF語法,那麼,是的,遊標需要是可更新的。但是這裏沒有使用該語法。

在發生更新的位置,光標和更新之間的唯一關係是@cont_id變量 - 但該變量可能以您想象的任何方式填充。它沒有以任何方式連接到光標。