Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.045 c
6-1090467431
banderas
2004-07-22 07:37
2004.10.03
idTCPServer можно ли узнать ip подключившихся?


9-1086474625
RyDmi
2004-06-06 02:30
2004.10.03
Работа с видеокартой


14-1095049149
Думкин
2004-09-13 08:19
2004.10.03
С днем рождения! 13 сентября


6-1091039930
dms_main
2004-07-28 22:38
2004.10.03
html encoding


6-1090744138
Asail
2004-07-25 12:28
2004.10.03
Опрос сети для поиска хостов...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский