Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Primary key as nchar(5)


Автор: Codegrammer 4.8.2010, 13:23
MS SQL SERVER 2008. База данных Northwind. Работаю с таблицей Customers. Там id - nchar(5). Как можно сгенерить уникальный ключ при вставки новой строки?

Автор: Gluttton 4.8.2010, 17:42
Если не ошибаюсь, то в MS SQL Server для символьных строк работают агрегатные функции min() и max()... Как вариант можно приобщить их (в частности max()) к решению данного вопроса. Т.е. определять ключ, как максимальное значение плюс какая то величина. Правда я не знаю, прокатит ли вот такое 'A' + 1 = 'B', но я думаю, что попробовать стоит.

Автор: VirusUZ 6.8.2010, 16:51
Код

@@identity+1

Автор: Gluttton 6.8.2010, 17:04
VirusUZ, хм, а я думал, что @@identity хранит последнее значение autoincrement...

Автор: LSD 9.8.2010, 16:27

M
LSD
Перенесено их баз данных

Автор: Akina 9.8.2010, 17:06
Цитата(Codegrammer @  4.8.2010,  14:23 Найти цитируемый пост)
Как можно сгенерить уникальный ключ при вставки новой строки?

Несомненно, генерить придётся программно.
Но вообще если ключ генерируется программно, то нет никакого смысла делать его не-числовым. 
В учебной БД он как раз "рожается" и вводится вручную как слегка расширенное ФИО кастомера.

Автор: motorway 9.8.2010, 17:54
НЯП, там был особый тип uid, который генерировал случайную текстовую строку.

Автор: Zloxa 10.8.2010, 10:01
motorway, GUID - 128 байтовая последовательность, которая частенько представляется 38ми символьной строкой, которую, крайне проблематично было бы сохранить в пятисимвольном поле.

Codegrammer, данное поле в учебной базе демонстрирует т.н. "натуральный ключ". В отличии от суррогатных, натуральные ключи несут в себе некую информационную составляющею, имеющую какую-то значимость за пределами контекста базы данных. Потому натуральные ключи не генерируются автоматически в базе. 

Я бы осмелился предположить что в качестве CustomerID должно использоваться значение из какого то реестра, вроде нашего ЕГРЮЛ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)