Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие.doc
Скачиваний:
57
Добавлен:
14.05.2015
Размер:
1.51 Mб
Скачать

3. Создание транзакций и работа с ними. Точки сохранения

Транзакцию можно описать с помощью ключевых слов BEGIN TRAN, СOMMIT TRAN и ROLLBACK TRAN. В коде программы любая транзакция должна начинаться инструкцией BЕGIN TRAN, а заканчиваться инструкцией COMMIT TRAN или ROLLBACK TRAN, в противном случае сервер будет сохранять блокировки до отсоединения клиента.

Когда в базе данных выполняется инструкция BEGIN TRAN, SQL Server помечает в журнале транзакций базы данных точку возвращения, которая будет использоваться в случае отката транзакции. Инструкция BEGIN TRAN явно указывает SQL Server, что все следующие инструкции вплоть до инструкции COMMIT TRAN или ROLLBACK TRAN должны трактоваться как один логический блок, в котором может выполняться несколько операций.

Выполнение инструкции COMMIT TRAN сообщает SQL Server, что работа закончена, и никаких других действий в транзакции больше не будет.

Выполнение инструкции COMMIT TRAN также подразумевает, что удовлетворены все условия теста ACID.

Выполнение инструкции ROLLBACK TRAN в SQL Server эквивалентно выбору пункта Undo меню Edit редактора Word. Отправка инструкции ROLLBACK TRAN на cepвep базы данных вызывает откат всех инструкций, выполненных после последней инструкции BEGIN TRAN. Как правило, ROLLBACK TRAN выполняется в длительной транзакции, если в какой-либо ее части обнаруживается ошибка. Как правило, код больших хранимых процедур или приложений с множеством инструкций SQL понять достаточно трудно. Именованные транзакции и точки сохранения служат именно этой цели. Они обеспечивают способ отката данной именованной (named) и сохраненной (saved) части кода, даже если эта часть имеет высокий уровень вложенности.

Именованные транзакции (named transaction) обеспечивают удобный способ назначения идентификатора для блока кода. Именованные транзакции упрощают реализацию отката больших объемов кода. Для создания именованной транзакции добавьте имя транзакции в инструкцию BEGIN TRAN:

/* Открыть внешнюю транзакцию */

BEGIN TRAN Update_Authors

UPDATE Authors

SET contract = 1

WHERE au_id = '341-22-1782'

/* Открыть внутреннюю транзакцию */

BEGIN TRAN Update_TitleAuthor

UPDATE TitleAuthor

SET royaltyper = royaltyper + 25

WHERE au_id = "341 -22-1782'

IF @@ERROR != 0

BEGIN

ROLLBACK TRAN Update_TitleAuthor

PRINT ‘Невозможно обновить Royalties’

RETURN

END

COMMIT TRAN Update_TitIeAuthor

COMMIT TRAN Update_Authors

Точки сохранения (SavePoints) — это просто другой способ выполнения именованных транзакций. Они обеспечивают возможность маркировки места в коде, которое используется при откате. Для создания точки сохранения используйте следующую команду SQL:

SAVE TRANSACTION Имя_Транзакции

При выполнении инструкции ROLLBACK TRAN достаточно указать идентификатор Имя_транзакции:

BEGIN TRAN

UPDATE Authors

SET contract= 1

WHERE au_id = '341-22-1782'

/* Сохраним нашу работу в этой точке */

SAVE TRANSACTION AuthorDone

UPDATE TitleAuthor

SET royaltyper = royaltyper +25

WHERE au_id = '341-22-1782'

IF @@ERROR != 0 or @@rowcount > 1

BEGIN

/* Откат и выход */

ROUBACK TRAN AuthorDone

PRINT 'Ошибка во время обновления TitleAuthor'

RETURN

END

COMMIT TRAN

PRINT 'Транзакция успешно завершена'