Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Локальная транзакция  [new]
miracle
Guest
Как сделать локальную транзакцию внутри тригера.
чтобы внешний ROLLBACK не отменял локальную транзакцию.
например я протоколирую действия с таблицей внутри тригера.

use pubs

set nocount on

IF NOT object_id('test') IS NULL begin
drop table test
drop table test_log
END
go
create table test (value varchar(50))
create table test_log (value varchar(50))
go
create trigger test_tr on test for insert as
begin transaction local_tr
insert into test_log select * from inserted
commit
return
go
begin transaction
insert into test (value) values ('test1')
rollback
--commit


select * from test
select * from test_log
2 фев 04, 16:56    [517557]     Ответить | Цитировать Сообщить модератору
 Re: Локальная транзакция  [new]
Glory
Member

Откуда:
Сообщений: 104760
Никак. В MSSQL любой rollback откатывает все транзакцю. Даже внутреннюю с commit-ом
2 фев 04, 17:01    [517572]     Ответить | Цитировать Сообщить модератору
 Re: Локальная транзакция  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Интересно, а зачем протоколировать то, что не было зафиксировано в базе?
2 фев 04, 17:03    [517576]     Ответить | Цитировать Сообщить модератору
 Re: Локальная транзакция  [new]
miracle
Guest
Я тоже думаю нельзя. Спросил для подтвержденя своих мыслей.
Вот в Oracle появились может и MS когда либо введет.
Правда можно обойти это ограничение передавая данные в job очередь.

2 pkarklin
Вдруг понадобится информация что Иванов пытался ввести неправильные данные :)
2 фев 04, 17:11    [517602]     Ответить | Цитировать Сообщить модератору
 Re: Локальная транзакция  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Пишите необходимую информацию в таблицы-переменные (@tmp). Откат транзакций на них не распространяется.
2 фев 04, 17:35    [517641]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить