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