Назначение вложенных транзакций
Я никогда не понимал, для чего подходит вложенная транзакция. Вложение вложенной транзакции ничего не совершает - она просто уменьшает @@TRANCOUNT
. И ROLLBACK
откатывает все.
BEGIN TRANSACTION
//do an update
BEGIN TRANSACTION
//do an insert
COMMIT TRANSACTION
COMMIT TRANSACTION
В чем разница:
BEGIN TRANSACTION
//do an update
//do an insert
COMMIT TRANSACTION
Пожалуйста, дайте мне пример, почему следует использовать вложенные транзакции и как они влияют.
С уважением, Петар
Ответы
Ответ 1
Вложенные транзакции позволяют вашему коду вызывать другой код (например, SP), который использует транзакции самостоятельно, не совершая при этом транзакции.
Тем не менее, вы можете использовать safepoints для отката внутри транзакции.
Здесь статья CodeProject, посвященная этому.
Ответ 2
ЕСЛИ у вас сценарий, в котором вы вызываете один SP, который содержит в себе другой вызов SP. и что внутренний SP также может быть вызван независимо от вашего приложения. В этом случае необходимо разместить внутреннюю транзакцию (на внутреннем SP), а также на родительский SP.