Как использовать транзакции (начать транзакцию, зафиксировать транзакцию)? - PullRequest
8 голосов
/ 26 сентября 2010

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

Ответы [ 2 ]

5 голосов
/ 26 сентября 2010

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

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

У Эрланда Соммарскога есть отличная статья о том, как использовать обработку ошибок в SQL Server.

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

2 голосов
/ 26 сентября 2010

Если бы я переводил moey с одного аккаунта на другой, я бы хотел, чтобы он был на 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'

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

Пример из " Вложенных хранимых процедур, содержащих шаблон TRY CATCH ROLLBACK? "

...