Главная страница
    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.041 c
14-1095052068
DelphiN!
2004-09-13 09:07
2004.10.03
Путь к диалогу выполнить Windows-a


3-1094126127
REA
2004-09-02 15:55
2004.10.03
Перехват ошибок IB


6-1090677043
Skyhawk
2004-07-24 17:50
2004.10.03
Remote Control


14-1095200367
Marser
2004-09-15 02:19
2004.10.03
50 самых тупых запросов в Яndex-e


3-1094040311
zrv
2004-09-01 16:05
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский