После некоторого тестирования, основанного на моем собственном псевдо-тестовом коде, приведенном выше, похоже, что единственное различие между использованием XACTABORT и не в TransactionScope состоит в том, что, если proc использует XACTABORT, он завершается неудачно (для ошибок, которые XACTABORT ловит ), чем, если процесс не использует XACTABORT. TransactionScope, по-видимому, перехватывает исключения, которые возникают в любой точке во время выполнения в пределах его области действия, даже если после возникновения этих исключений произошли другие операции.
Для хранимой процедуры с включенным XACTABORT никаких изменений не наблюдалось после первого сбоя, а когда XACTABORT был выключен, наблюдались изменения из второго оператора. Однако в обоих случаях TransactionScope не завершился, но выдал исключение.
Итак, быстрые ответы на мои вопросы:
- Если XACTABORT включен, второй оператор удаления не будет выполняться
- Если XACTABORT выключен, будет выполнен второй оператор удаления (и любой последующий код)
- Если во время выполнения хранимой процедуры возникла исключительная ситуация, возвращаемое значение для метода будет ложным