У меня есть требование, когда я перебираю 10 записей и вставляю эти записи в 3 разные таблицы внутри транзакции. Я беру запись за раз из цикла с транзакцией.Как продолжить после ошибки в блоке catch?
Мое требование: если первые 8 записей были успешно вставлены, и если инструкция не выполнена на 9-й записи, она должна зарегистрировать ошибку и продолжить вставить 10-ю запись.
Сохраненная процедура не должна останавливаться, если какая-либо строка имеет какую-либо ошибку.
Я попытался поместить транзакцию в дочерний блок TRY-CATCH, но все еще не удалось.
BEGIN TRY
DECLARE @TotalRecord AS INT = 10
,@LoopStartCount AS INT = 1
,@AskPkQuotationId AS INT;
--Some select stuff here
WHILE(@LoopStartCount <= @TotalRecord)
BEGIN
BEGIN TRY
BEGIN TRAN
--Do some insert update for each record.
COMMIT TRAN
END TRY
BEGIN CATCH
--Log Error and Continue with next record
END CATCH
SET @LoopStartCount = @LoopStartCount + 1;
END
END TRY
BEGIN CATCH
--Log parent error
END CATCH
поэтому цикл не должен останавливаться на ошибках, чем для чего вам нужна транзакция? – GuidoG
@GuidoG Что делать, если выбранная запись подняла какую-либо ошибку, она должна откат, который вставляет и переходит к следующей записи. –
, но если выбранная запись подняла ошибку при вставке, то она не будет вставлена, поэтому нет необходимости откатываться? Или я чего-то не хватает? – GuidoG