Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.150.59] |
|
Сообщ.
#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
|