8

В некоторых случаях я видел использование транзакций, но никогда не понимал, в каких ситуациях они должны использоваться. Как и когда транзакции должны использоваться (начать транзакцию)? Я прочитал, что Microsoft не предлагает использовать операторы транзакций (фиксация, откат) внутри триггера и хранимую процедуру.Как использовать транзакции (начать транзакцию, совершить транзакцию)?

ответ

5

Сделки могут использоваться в сочетании с обработкой ошибок в хранимых процедурах или сценариях SQL при вставке или обработке данных, чтобы убедиться, что все согласовано.

Например, если у вас есть хранимая процедура, которая вставляет записи в родительскую таблицу и дочернюю таблицу, вы должны убедиться, что родительская запись сначала вставлена; если это не удается, вы можете отменить изменения, чтобы у вас не было осиротевшей дочерней записи.

Erland Sommarskog имеет great article о том, как использовать обработку ошибок в SQL Server.

И наконец, где Microsoft предложила не использовать транзакции в хранимых процедурах? Я бы подумал, что хранимые процедуры будут идеальным местом для их использования.

+0

Спасибо, может быть, мое заявление о слишком прямо: есть предупреждение, что с помощью фиксации или отката внутри процедуры или триггера может привести к ошибкам: http://msdn.microsoft.com /en-us/library/ms187844(v=SQL.100).aspx – juur

2

Если я переходила МД с одного счета на другой, я бы хотел, чтобы это было 100% успех или 100% провал:

UPDATE PersonalAccount SET Balance = Balance - 100 WHERE Username = 'gbn' 
--what if the server caught fire here? 
UPDATE SavingsAccount SET Balance = Balance + 100 WHERE Username = 'gbn' 

Что касается того, что вы читаете, полный мусор, за исключением без необходимости использования НАЧАТЬ TRAN в триггере.

Пример из «Nested stored procedures containing TRY CATCH ROLLBACK pattern?»

Смежные вопросы