Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: транзакции  [new]
7 7 7
Guest
invm
7 7 7
какие еще у меня варианты есть?
select top (0)
 field2, field3, ... fieldN
into
 #t
from
 table1;
 
update table2 
 set field1=1
output
 inserted.field2, inserted.field3, ... inserted.fieldN into #t (field2, field3, ... fieldN)
where field1=0;

insert into table1
 (field2, field3, ... fieldN)
select
  field2, field3, ... fieldN
from
 #t;


Мне надо гарантировать: если вставка в table1 успешна, то сделать апдейт table2. И если вставка не успешна, апдейт не должен сработать.
26 апр 13, 14:42    [14235349]     Ответить | Цитировать Сообщить модератору
 Re: транзакции  [new]
invm
Member

Откуда: Москва
Сообщений: 9443
7 7 7
И если вставка не успешна, апдейт не должен сработать.
Обернуть приведенный код транзакцией и откатывать ее при неуспешности вставки, не?
26 апр 13, 15:03    [14235490]     Ответить | Цитировать Сообщить модератору
 Re: транзакции  [new]
7 7 7
Guest
invm,
Вот так?:

Begin transelect top (0)
field2, field3, ... fieldN
into
#t
from
table1;
update table2
set field1=1
output
inserted.field2, inserted.field3, ... inserted.fieldN into #t (field2, field3, ... fieldN)
where field1=0;
insert into table1
(field2, field3, ... fieldN)
select
field2, field3, ... fieldN
from
#t;
IF @@RowCount > 0 BEGIN
Commit tran
End
Else begin
Rollback tran
End
26 апр 13, 15:19    [14235631]     Ответить | Цитировать Сообщить модератору
 Re: транзакции  [new]
7 7 7
Guest
invm,
Вот так?:

Begin tran
select top (0)
field2, field3, ... fieldN
into
#t
from
table1;
update table2
set field1=1
output
inserted.field2, inserted.field3, ... inserted.fieldN into #t (field2, field3, ... fieldN)
where field1=0;
insert into table1
(field2, field3, ... fieldN)
select
field2, field3, ... fieldN
from
#t;
IF @@RowCount > 0 BEGIN
Commit tran
End
Else begin
Rollback tran
End
[/quot]
26 апр 13, 15:20    [14235636]     Ответить | Цитировать Сообщить модератору
 Re: транзакции  [new]
Гость333
Member

Откуда:
Сообщений: 3683
7 7 7
IF @@RowCount > 0 BEGIN
Commit tran
End
Else begin
Rollback tran
End

Огласите ваш критерий "успешности вставки", плиз.
26 апр 13, 15:28    [14235693]     Ответить | Цитировать Сообщить модератору
 Re: транзакции  [new]
7 7 7
Guest
Гость333
7 7 7
IF @@RowCount > 0 BEGIN
Commit tran
End
Else begin
Rollback tran
End

Огласите ваш критерий "успешности вставки", плиз.


Критерии: все строки из table2 c field1=0 вставились в table1, все строки (на момент инсерта в table1) из table2 c field1=0 проапдейтились до field1=1.
26 апр 13, 16:32    [14236076]     Ответить | Цитировать Сообщить модератору
 Re: транзакции  [new]
7 7 7
Guest
7 7 7
Гость333
пропущено...

Огласите ваш критерий "успешности вставки", плиз.


Критерии: все строки из table2 c field1=0 вставились в table1, все строки (на момент инсерта в table1) из table2 c field1=0 проапдейтились до field1=1.


Т.е. если из table2 в table1 успешно вставляется 1000000 записей по условию field1=0, то ровно этот же млн. записей в table2 должен проапдейтиться до field1=1. Если по каким-то причинам этот миллион записей не вставился в table1 целиком, то апдейтить table1 нельзя и вставку в table1 надо откатить.
26 апр 13, 19:41    [14236829]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft SQL Server Ответить