У меня есть ситуация, когда мне нужно многократно выполнять хранимую процедуру. Теперь эта процедура (spMAIN) имеет курсор внутри, который ищет значение из таблицы как T1, которое имеет следующую структуру
ID Status
---- --------
1 New
2 New
3 success
4 Error
теперь курсор ищет все строки со статусом 'New'
Теперь во время обработки, если этот экземпляр курсора обнаруживает ошибку, другой SP говорит, что нужно вызвать spError, столбец 'Status' вT1 должен быть обновлен до «Error» и spMAIN должен быть вызван снова, что снова повторяет процесс, ища строки с «new»
как мне это сделать?Кроме того, также, в то время как мы находимся, что, если у 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