Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Транзакция?   Найти похожие ветки 

 
kvit ©   (2004-09-01 12:06) [0]

Есть типа такой хранимой процедуры:

CREATE PROCEDURE [T_add]
(@msg char(10))
AS
--------------------------------------------------------------------------
declare  @ID int, @ID_parent int;
-------------------------------------------------------------------------
set @ID_parent=(select value from CONFIG where param= "ID_parent")

set  @ID=1+ (select  ISNULL(max(ID), 0)  from T where ID_parent=@ID_parent)

----------------------------------------------------------------------------
insert into T (ID, msg, ID_parent, DT)
values (@ID, @msg, 0, getdate())
---------------------------------------------------------------------------
return(@ID)

Я может не совсем понимаю транзакций, но может ли получиться ситуация, что значение @ID=1+max(ID) будет вставлено другим пользователем при параллельной работе и вызове этой же процедуры?


 
Flagman ©   (2004-09-01 13:17) [1]

А что, генераторов в MSSQL нет??? 8-()


 
Роман Снегирев   (2004-09-01 13:30) [2]

А что, генераторов в MSSQL нет??? 8-()
конечно же нету, но там есть функция, позволяющая считывать последний вставленный id


 
Flagman ©   (2004-09-01 13:46) [3]

> Роман Снегирев

Я с MSSQL не работал практически. Хм... С генераторами-то удобнее...
Тогда проблема сводится к первоначальной.
Тогда правильнее будет:

insert into T (ID, msg, ID_parent, DT)
values (позволяющая_считывать_последний_вставленный_id(), @msg, 0, getdate())

;)


 
Flagman ©   (2004-09-01 13:48) [4]

И set  @ID=1+ (select  ISNULL(max(ID), 0)  from T where ID_parent=@ID_parent) не делать ес-сно...


 
Ega23 ©   (2004-09-01 13:49) [5]

declare @X int
Select @X=IsNull(Max(ID),0)+1 from Table1
Insert into Table1(ID, ....) values (@x, ....)


 
Ega23 ©   (2004-09-01 13:50) [6]

Flagman ©   (01.09.04 13:48) [4]

С какой стати?


 
Flagman ©   (2004-09-01 13:59) [7]

> Ega23

А не получиться, что при одновременной работе процедуры с двух клиентов, после первой транзакция еще не за-commit-ена, и вторая вернет то же значение @X, что и первая?


 
Ega23 ©   (2004-09-01 14:02) [8]

если одним блоком делать, то не получится.
А ещё лучше в ХП вынести, тогда точно не получится.


 
Flagman ©   (2004-09-01 14:04) [9]

> А ещё лучше в ХП вынести, тогда точно не получится.
Согласен.


 
KSergey ©   (2004-09-01 14:36) [10]

А чем Identity не устраивают?


 
Ega23 ©   (2004-09-01 14:41) [11]

KSergey ©   (01.09.04 14:36) [10]

Да там вообще какая-то безбашенная идеология о "блуждающих между серверами записях". Почему-то оттуда следует, что Identity - никак не можно.


 
KSergey ©   (2004-09-01 14:54) [12]

> [11] Ega23 ©   (01.09.04 14:41)
> Да там вообще какая-то безбашенная идеология о "блуждающих
> между серверами записях".

Меээээ....
Вы о чем???


 
Ega23 ©   (2004-09-01 14:55) [13]

А их 2 ветки было: эта и http://delphimaster.net/view/3-1094024081/



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
1-1095162356
Луарвик
2004-09-14 15:45
2004.10.03
TForm1.BitBtn1MouseDown(Sender: TObject...


3-1094302756
Arnold
2004-09-04 16:59
2004.10.03
Как создать свой файл gdb


1-1095747881
drew
2004-09-21 10:24
2004.10.03
VB макрос...может кто поможет в листе Excel надо сравнить ячейки


4-1093212672
ZeBriD
2004-08-23 02:11
2004.10.03
Как подключить виндовские библиотеки???


6-1090958052
Lobster
2004-07-27 23:54
2004.10.03
IP -> HostName