У меня есть ситуации, когда мне нужно повторно выполнить хранимую процедуру Теперь эту процедуру (spMAIN) имеет курсор, внутри которого выглядит для значения из таблицы, как T1, который имеет следующую структуруМногократно выполнение хранимой процедуры
ID Status
---- --------
1 New
2 New
3 success
4 Error
теперь курсор выглядит для всех строк со статусом «Новый»
Теперь при обработке, если этот экземпляр курсора обнаруживает ошибку, другой SP сказать spError должен быть вызван, «Статус» столбец в T1 необходимо обновить до «Ошибка», и необходимо снова вызвать spMAIN, который снова повторяет процесс, ищет строки с «новым»
Как мне это сделать? Кроме того, в то время как мы находимся в нем, что, если SP имеет другие SP внутри него, и если какой-либо из этих SP вызывает ошибку, то же самое нужно сделать, таблица T1 нуждается в обновлении («Ошибка») и Необходимо снова вызвать spMAIN.
Вы также можете порекомендовать что-нибудь?
вот некоторый код
ALTER PROC zzSpMain
AS
BEGIN
DECLARE @id INT
BEGIN TRY
IF EXISTS (SELECT *
FROM dbo.zzTest
WHERE istatus = 'new')
BEGIN
DECLARE c CURSOR
FOR SELECT id
FROM zztest
WHERE istatus = 'new'
OPEN c
FETCH NEXT FROM c INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @id
IF @id = 2
BEGIN
UPDATE zztest
SET istatus = 'error'
WHERE id = @id
RAISERROR ('Error occured', 16,
1)
END
UPDATE zztest
SET istatus = 'processed'
WHERE id = @id
FETCH NEXT FROM c INTO @id
END
CLOSE c
DEALLOCATE c
END
END TRY
begin CATCH
EXEC zzSpError
END CATCH
END
Каждый раз, когда я вижу, курсор обычно я уверен, что есть лучший, более РСУБД установить стиль способ сделать то, что нужно. – Joe