Я сортировал всю вложенную транзакционную вещь на SQL-сервере, и я проглядел эти самородки понимания поведения вложенного транс ':
- При вложении транзакций только
внешняя фиксация будет фактически
совершить.
- "Commit Trans txn_name", когда вложенные
, всегда будет применяться к самому внутреннему
транзакции, даже если txn_name ссылается
к внешней транзакции.
- "ROLLBACK TRAN" (нет имени), даже в
внутренняя транзакция, откат
Все транзакции.
- "ROLLBACK TRAN txn_name" - txn_name должно
обратитесь к самому внешнему имени txn.
Если нет, это провалится.
Учитывая это, есть ли какая-либо польза от именования транзакций? Вы не можете использовать его для таргетинга на определенную трансляцию, как для фиксации, так и для отката.
Это только для комментирования кода?
Спасибо,
Йони
Ответ 1
Эффективно это просто памятная записка программистов. Если вы имеете дело с Tx, который имеет несколько внутренних транзакций, предоставление каждого значимого имени может помочь вам убедиться, что tranactions соответствующим образом вложены и могут ловить логические ошибки.
Ответ 2
У вас может быть откат процедур только для их собственной работы над ошибкой, позволяя вызывающему лицу решить, оставить ли всю транзакцию или восстановить ее и попробовать альтернативный путь. См. Обработка исключений и вложенные транзакции для шаблона процедуры, который позволяет это атомное поведение.
Ответ 3
Идея состоит в откате части вашей работы, например вложенной транзакции. Не всегда работает так, как предполагалось.
Хранимые процедуры, использующие устаревшие обработки ошибок и точки сохранения, могут не работать должным образом, когда они используются вместе с блоками TRY... CATCH: Избегать смешивания старых и новых стилей ошибки обработка.
Уже обсуждалось здесь @@ERROR и/или TRY-CATCH