Привет всем
я новичек, только начинаю изучать sql
mssql 2000, delphi7, ODBC
пишу клиента
на днях сообщили, что клиентских машин будет ~15
заполняю платежку
что делать с блокировками таблиц, как сделать чтоб 15 человек не мешали друг-другу
DECLARE @pol_id int
DECLARE @vid_op int
DECLARE @bic char (9)
DECLARE @corr_acc char (20)
......
set @pol_id=2
select @vid_op=(select pol.vid_id from dbo.pol where pol.pol_id=@pol_id)
select @bic=(select bic from dbo.bank_list where
bic_id=(select bic_id from dbo.pol where pol.pol_id=@pol_id))
select @corr_acc=(select corr_acc from dbo.bank_list where
bic_id=(select bic_id from dbo.pol where pol.pol_id=@pol_id))
S>Привет всем S>я новичек, только начинаю изучать sql S>mssql 2000, delphi7, ODBC S>пишу клиента S>на днях сообщили, что клиентских машин будет ~15 S>заполняю платежку S>что делать с блокировками таблиц, как сделать чтоб 15 человек не мешали друг-другу
1. Чтоб 15 человек не мешали друг другу, надо делать транзакцию как можно короче. У тебя простая вроде транзакция, неужели проблему есть?
2. @Num_PayDoc никак нельзя сделать автоинкрементным? если сделать — исчезнет один селект в транзакции
3. В твоём варианте транзакция будет закоммичена, даже если в каком-нить операторе произойдёт ошибка. Чтобы отлавливать ошибку, надо после каждого оператора писать что-нить типа
if @@error <> 0
begin
rollback tran--откатываем транзакциюreturn--выходим из процедурыend
Здравствуйте, Arsu, Вы писали:
A>3. В твоём варианте транзакция будет закоммичена, даже если в каком-нить операторе произойдёт ошибка. Чтобы отлавливать ошибку, надо после каждого оператора писать что-нить типа
A>if @@error <> 0
A>begin
A> rollback tran--откатываем транзакцию
A> return--выходим из процедуры
A>end
A>
Или, еслт семантика того требует, то
if @@rowcount = 0
begin
rollback transaction
return
HgLab: Mercurial Server and Repository Management for Windows
Здравствуйте, Arsu, Вы писали:
A>3. В твоём варианте транзакция будет закоммичена, даже если в каком-нить операторе произойдёт ошибка. Чтобы отлавливать ошибку, надо после каждого оператора писать что-нить типа
A>if @@error <> 0
A>begin
A> rollback tran--откатываем транзакцию
A> return--выходим из процедуры
A>end
A>
Или, если нет охоты обрабатывть ошибку/и, установить перед началом транзакции SET XACT_ABORT ON.