Прежде, чем я получу воинствующее изменение курсора, позвольте мне сказать, что я пытаюсь использовать вложенные курсоры, чтобы сделать то, что мне нужно сделать только один раз, но если я запустил оперативную хранимую процедуру один раз для каждого пользователя и агентства, которые у меня естьчтобы сделать это несколько сотен раз.
Я думал, что вложенный курсор в этом случае спасет меня от работы, однако, когда я запускаю этот скрипт, он проходит через внешний курсор только один раз, тогда как внутренний работает просто отличнодля этого бега.В тестовом примере внешний набор курсоров состоит из двух строк, а внутренний - около пятидесяти.Он проходит через первую строку внешнего курсора и все пятьдесят внутренних, но затем все готово.
Как видите, я сохраняю результат внешнего извлечения ('@@ fetch_status)'), поэтому он не мешает внутреннему курсору.
Я не вижу, в чем проблема (очевидно).Кто-нибудь может увидеть то, что я не могу?
declare @fetch_user int
declare @fetch_agency int
declare user_cursor cursor for
select upn from #users
open user_cursor
fetch next from user_cursor into @upn
select @fetch_user = @@fetch_status
while @fetch_user = 0
begin
declare agency_cursor cursor for
select agency, subagency from agency_system where system_id = 1
open agency_cursor
fetch next from agency_cursor into @agency, @subagency
select @fetch_agency = @@fetch_status
while @fetch_agency = 0
begin
select @upn, @agency, @subagency
EXEC AddUserToAgencyInRole
@upn
, @agency
, @subagency
, @system_id
, @role_id
, @response output
fetch next from agency_cursor into @agency, @subagency
select @fetch_agency = @@fetch_status
end
close agency_cursor
deallocate agency_cursor
fetch next from user_cursor into @upn
select @fetch_user = @@fetch_status
end
close user_cursor
deallocate user_cursor