В чем необходимость вложенных транзакций в SQL Server? Может ли кто-нибудь объяснить пример в реальном времени.Вложенные транзакции SQL Server
Я понял, что любая ошибка/откат во внутренних транзакциях откатит все транзакции.
В чем необходимость вложенных транзакций в SQL Server? Может ли кто-нибудь объяснить пример в реальном времени.Вложенные транзакции SQL Server
Я понял, что любая ошибка/откат во внутренних транзакциях откатит все транзакции.
Вложенные транзакции сами по себе мало что могут использовать в SQL Server (или большинстве других СУБД), я считаю, что только BerkelyDB supports them.
Однако в программировании они, по-моему, имеют применение, но в основном из-за изоляции/разделения кода, наблюдаемой на большинстве языков программирования.
Представьте себе следующую псевдо-код:
function dostuff()
{
begin transaction
//manage data changes
commit transaction
}
function docomplexstuff()
{
begin transaction
//change some data
dostuff()
commit transaction
}
function whatever
{
//do random stuff
dostuff()
}
Если вы называете docomplexstuff вы бы вложенную транзакцию, но это в основном побочный эффект. Внутренняя транзакция фактически гарантирует, что транзакция используется при вызове метода dostuff из любого пути кода, который вы могли бы назвать методом, и внешняя транзакция docomplexstuff гарантирует, что у вас есть манипуляция данными в этом методе, а также в дочернем методе как одна транзакция ,
Так что, на мой взгляд, это скорее гарантия того, что атомарность внутренней транзакции гарантирована каким-либо образом вызвана кодом, а также гарантия того, что если вы хотите, чтобы внутренний метод, выполненный в рамках другой транзакции, был зафиксирован как целое.
Необходимость для меня заключается в выполнении тестов модулей Sql Server/хранимой процедуры.
Вот мой пример ...
Создать процедуру, которая делает что-то для вашего приложения (вставляет записи в нескольких таблиц) - обернуть всю эту вещь в сделке
Написать модульный тест, чтобы проверить, что хранится процедура. Как я пишу свои модульные тесты, они всегда начинаются с begin tran
, а затем выполняют хранимую процедуру, которую я пытаюсь проверить, а затем откатываем транзакцию независимо от результата (вы не хотите, чтобы ваши модульные тесты создавали плохие данные в вашем база данных, даже если она находится в среде Dev).
[Алфавит SQL Server DBA в день: (26/30) вложенные транзакции реальны] (http://www.sqlskills.com/blogs/paul/a-sql-server-dba-myth-a-day -2630-вложенные транзакции-в реальных /) –