Хорошо, я в полном недоумении - этот бит кода работал, а теперь вдруг не работает ...
declare GetAllCodes cursor local for
select ac.activationCodePKID from ActivationCodes ac
left join OrdersLineItems od on ac.activationCodePKID = od.activationCodePKID
where od.activationCodePKID is null and ac.internalorderPKID is not null
and ac.campaignID is not null
and ac.enteredBy like 'ProcessRequest|Entitlement%'
RAISERROR ('step completed', 0, 1) WITH NOWAIT
open GetAllCodes
while (1=1)
begin
RAISERROR ('entering cursor', 0, 1) WITH NOWAIT
fetch next from GetAllCodes into @activationCodePKID
if (@@fetch_status <> 0)
begin
DEALLOCATE GetAllCodes
break
end
exec fixOrder @activationCodePKID, 6, 7
end
Кажется, он просто застрял в цикле.Я закомментировал заявление exec и просто напечатал отчет о состоянии печати, но он просто продолжается.Печатается оператор «шаг завершен», как и оператор «ввод курсора».А то ничего .... просто зависает.Сам запрос возвращает 192 строки, так что для повторного цикла он должен повторяться 192 раза, а затем прерываться и заканчиваться.Идеи?
РЕДАКТИРОВАТЬ:
Я добавил это:
declare @var varchar(10)
set @var = 'here: ' + cast(@@fetch_status as varchar(10))
RAISERROR (@var, 0, 1) WITH NOWAIT
... сразу после оператора fetch next from GetAllCodes into @activationCodePKID
- все еще ничего.«Вводный курсор» все еще печатается, но потом просто зависает ...
РЕДАКТИРОВАТЬ 2:
Я удалил много вещей и добавил это правопосле оператора 'объявлять курсор', чтобы увидеть, могу ли я вывести НИЧЕГО ...
RAISERROR ('query done', 0, 1) WITH NOWAIT
open GetAllCodes
fetch next from GetAllCodes into @activationCodePKID
close GetAllCodes
deallocate GetAllCodes
Все еще зависает ... так что я вынул "оператор извлечения", и он, кажется, больше не зависает,Очевидно, он ничего не делал, потому что я ничего не делал, но завершил выполнение.
Что заставляет меня задуматься о том, почему оператор fetch зависает.Существуют ли какие-либо настройки сервера, которые могут повлиять на это?Некоторые проблемы с памятью?Аппаратные проблемы?