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

Откуда:
Сообщений: 517
День добрый!
Сорри, торможу :(

Есть код, который выполняет несколько инсертов и апдейтов, если один из них "падает", то нужно откатить все остальные, вот пример:


create table MyTbl (col1 int, col2 int)


Пытаемся вставить три строки:
insert into MyTbl values(10,100) 
insert into MyTbl values(1/0,200)
insert into MyTbl values(30,300) 


Второй инсерт соответственно падает, необходимо не выполнять(откатить) первый и третий инсерт.

Хелп плз!
17 мар 14, 17:20    [15740140]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с транзакцие плз.  [new]
_djХомяГ
Guest
100500 раз Транзакции в Ms SQL
17 мар 14, 17:31    [15740197]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с транзакцие плз.  [new]
_djХомяГ
Guest
это для версии >=2005
для <2005 TRY CATCH нет - надо проверять после каждого DML оператора значение @@error
17 мар 14, 17:34    [15740225]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с транзакцие плз.  [new]
_djХомяГ
Guest
и комменты ниже читатйте - там set xact abort лишнее (либо/либо)
17 мар 14, 17:39    [15740258]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с транзакцие плз.  [new]
abrashka
Member

Откуда:
Сообщений: 517
_djХомяГ,

Спасибо!
Речь идет об SQL 2008, но чего-то не получается...
Эксперементирую...
17 мар 14, 17:44    [15740290]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с транзакцие плз.  [new]
abrashka
Member

Откуда:
Сообщений: 517
abrashka,

Сделал по примеру, все равно не работает :(
declare @t int
begin try
	begin transaction
insert into MyTbl values(10,100) 
	set @t = @@trancount
	if @t = 0

		
insert into MyTbl values(1/0,200) 
	set @t = @@trancount
	if @t = 0

insert into MyTbl values(30,300) 
	set @t = @@trancount
	if @t = 0
	commit transaction
		
end try
begin catch
select 'ERROR'
end catch;
17 мар 14, 17:55    [15740377]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с транзакцие плз.  [new]
_djХомяГ
Guest
Неверно "скопировали"
create table #mytable (
a int,b int)
go
declare @t int
begin try
   set @t = @@trancount
    if @t = 0 begin transaction
   insert into #MyTable values(10,100) 
		
   insert into #MyTable values(1/0,200) 

  insert into #MyTable values(30,300) 
	if @t = 0
	commit transaction
		
end try
begin catch
if @t = 0 and @@trancount > 0
		rollback transaction;

select 'ERROR'
end catch;
select * from #mytable
17 мар 14, 18:04    [15740437]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с транзакцие плз.  [new]
abrashka
Member

Откуда:
Сообщений: 517
_djХомяГ,

Огромное спасибо!
Теперь дошло :)
17 мар 14, 18:19    [15740530]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить