SQL Server 2005: Почему именные транзакции?

Я сортировал всю вложенную транзакционную вещь на 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