Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Save transaction @savepoint_variable | savepoint_name

Transaction_name | @tran_name_variable

BEGIN TRANSACTION

Включение транзакций в программный код

Основу использования транзакций в программном коде на языке Transact-SQL составляют четыре команды: begin transaction, commit transaction (commit work), rollback transaction (rollback work), save transaction, к более подробному объяснению которых я сейчас и приступлю.

О Команда начала явной транзакции.

[WITH MARK [ 'description' ]]]

где:

• transaction_name — имя транзакции. Длина имени не может превышать 32 символа. Само же имя должно удовлетворять требованиям,
предъявляемым к именам объектов в Transact-SQL. Именованные
транзакции используются при наличии вложения транзакций;

• @tran_name_variabie — имя транзакции, указанное с помощью переменной (ИСПОЛЬЗУЮТСЯ ТИПЫ CHAR, VARCHAR, NCHAR, NVARCHAR);

• with mark ['description'] — конструкция, позволяющая пометить-
транзакцию, with mark — метка, которая указывается в журнале транзакций и в дальнейшем может быть использована при восстановлении базы данных (см. разд. 8.1.5). description — описание, с помощью которого метка может быть идентифицирована при восстановлении ре­зервной копии. Помечается только транзакция, изменяющая данные.

□ Команда начала распределенной транзакции.

BEGIN TRANSACTION]

[transaction_name | @tran_name_variable

Здесь отсутствует секция with mark, т. е. распределенные транзакции нельзя маркировать.

О Команда завершения явной транзакции.

COMMIT [ TRANSACTION ] [ transaction_name | @tran_name_variable ] ]

Сюда включены следующие разделы:

• transactiorwiame — имя завершаемой транзакции. Сервер игнорирует
это имя, так что оно служит скорее для того, чтобы сделать понятным
программный код;

• @tran_name_variable — переменная, определяющая имя завершаемой
транзакции (используются типы char, varchar, nchar, nvarchar).

□ Команда точки сохранения.

Здесь:

• save_point — имя точки сохранения. Длина имени не может превы­
шать 32 символа и должна удовлетворять правилам для имен объектов
SQL Server 2000;

• @savepoint_variabie — переменная, содержащая имя точки сохране­
ния (ИСПОЛЬЗУЮТСЯ ТИПЫ CHAR, VARCHAR, NCHAR, NVARCHAR).

□ Команда принудительного отката транзакции. Прерывает операцию, и данные возвращаются в исходное состояние. В журнале транзакций дела­ется соответствующая отметка.

ROLLBACK [ TRAN[ SACTION ]

[ transaction_name | @tran_name_variable savepoint_name | @savepoint_variable ] ]

Включены следующие разделы:

• transaction_name — ИМЯ транзакции;

• @tran_name_variabie — переменная, задающая имя транзакции;

• savepoint_name — имя контрольной точки, заданной с помощью
save transaction. Откат, таким образом, будет происходить только до
контрольной точки.

• @savepoint_variable — переменная, задающая имя контрольной точки.

Как и в предыдущих главах, приведу примеры использования описанных команд и дам дополнительные комментарии по включению транзакций в свои программы.

Пример. Простая транзакция

BEGIN TRANSACTION DECLARE @a BIGINT

SELECT @a=number FROM list

BEGIN TRANSACTION

CREATE TABLE

adres (

ul CHAR(20) NOT NULL,

dom CHAR(20) NOT NULL,

kv CHAR(20) NOT NULL)

IF EXISTS(SELECT * FROM abon WHERE tab<10000)

BEGIN

INSERT INTO adres

SELECT a.ul,a.dom,a.kv FROM abon a

WHERE a.tab<100000

END ELSE

BEGIN

ROLLBACK TRANSACTION RETURN END COMMIT TRANSACTION

Разбирая пример 8.2, обратите внимание на то, как проводится откат транзакции. После команды rollback transaction стоит команда return. Это важно, т. к. команда rollback transaction, по сути, осуществляет выход из транзакции, а выполнение после этого команды commit transaction приведет, естественно, к ошибке (см. о счетчике транзакций комментарии к при­меру 8.4).

Пример. Точка сохранения

CREATE PROCEDURE dbo.new AS DELETE FROM adres BEGIN TRANSACTION namel

INSERT INTO adres VALUES(1,' ',' ',' ') INSERT INTO adres VALUES(2,' ',' ',' ') INSERT INTO adres VALUES(3,' ',' ',' ')

--Закрепление содержимого таблицы после трех вставок

SAVE TRANSACTION naine2

INSERT INTO adres VALUES(4, ' ', ' ', ' ') INSERT INTO adres VALUES(5, ' ', ' ', ' ') INSERT INTO adres VALUES(6, ' ', ' ', ' ')

ROLLBACK TRANSACTION name2 COMMIT TRANSACTION SELECT * FROM adres RETURN

В результате выполнения данной хранимой процедуры в таблице останутся только три первые строки (значения первого поля: 1, 2, 3). Другими словами, закрепленными окажутся команды до точки сохранения.

<== предыдущая лекция | следующая лекция ==>
Программирование транзакций | Управление транзакциями. Перечислю несколько команд, которые влияют на поведение транзакций
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 347; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.