Форум: "Базы";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизТранзакция? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c