Главная страница
    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.04 c
3-1094400280
Влад
2004-09-05 20:04
2004.10.03
Как можно поддерживать фиксированный объем базы FB/IB


14-1094967972
Knight
2004-09-12 09:46
2004.10.03
А у меня винда дома упала... :(


14-1095068974
VID
2004-09-13 13:49
2004.10.03
Ищу фулфлэш для Siemens S45i


14-1095279088
Гранд операнд
2004-09-16 00:11
2004.10.03
Что делать?


4-1093413745
sohat
2004-08-25 10:02
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский