Сгенерировать уникальный ID
, Paradox, BDE
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.43] |
|
|
ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
Сгенерировать уникальный ID
, Paradox, BDE
|
Сообщ.
#1
,
|
|
|
|
Только начал разбираться как работать с БД, так сразу наткнулся на вопрос, который поставил меня в тупик.
В общем есть несколько таблиц, причем в каждой таблице есть поле "ID" (число). Нужно создать новую запись в одной из таблиц, и полю "ID" присвоить уникальное значение. Вопрос, как сгенерировать такое уникальное значение? Заранее спасибо за ответ. |
|
Сообщ.
#2
,
|
|
|
|
CreateGuid ?
|
|
Сообщ.
#3
,
|
|||||
|
|
Если приходится генерировать его врукопашную (сама база НЕ умеет ето делать, например, с помощью AUTOINCREMENT-поля) может подойти что-то вроде: MS SQL:
При етом желательно SET TRANSACTION ISOLATION LEVEL SERIALISABLE И, если eсли уж генерить етот ID руками, лучше сразу предусмотреть возможность создания уникальных ID в нескольких экземплярах базы (мало ли, понадобится распределенную ИС создавать), т.е., чтоб ID состоял из двух частей -- кода экземпляра БД и, например, сквозного номера в пределах етого екземпляра, вроде етого:
|
|
Сообщ.
#4
,
|
|
|
|
Спасибо, вроде все понятно.
Только интересно стало, не случится ли когда-нибудь в этой строчке @NewID=isnull(max(ID), 0)+1 ошибка переполнения? |
|
Сообщ.
#5
,
|
|
|
|
Обязательно случится. Когда нибудь. Переполнение у любого типа случиться может, даже у 128-битного GUID
Надо просто диапазон выбирать с запасом порядка на два... |
|
Сообщ.
#6
,
|
|
|
|
И сразу еще вопрос.
Вот сгенерировали мы ID, создали новую запись. а как наибыстрейшим способом получить из моей программы этот ID? |
|
Сообщ.
#7
,
|
|||
|
|
??? Ну вот пример хранимой процедуры, которая делает и то и другое и третье: MS SQL
|