Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Северянин Member Откуда: Сообщений: 90 |
MS SQL 2012 Раньше использовал в качестве первичного ключа автоинкремент. В новой задаче хочу использовать последовательность. Как лучше сделать: запихать NEXT VALUE FOR в триггер на вставку (если честно, не люблю триггеры) или предварительно вычислять, а затем уже вставлять вместе с другими данными. Есть ли какие подводные камни в этих технологиях, или без разницы? Да, и если есть ссылка на статью (без воды) по данному вопросу, буду весьма признателен. P.S. Не пинайте сильно за терминологию. Ещё только осваиваю сию науку. |
15 фев 16, 11:13 [18816875] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
И как вы сможете добавить запись с ПК, значение которого неизвестно на момент добавления ? |
||
15 фев 16, 11:17 [18816902] Ответить | Цитировать Сообщить модератору |
Северянин Member Откуда: Сообщений: 90 |
Glory, Значит все-таки триггер? |
15 фев 16, 11:20 [18816919] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Вы прикидываетесь ? Или вы про INSTEAD OF триггер ? Иначе как вы сможете "попасть" в триггер, если значение для ПК проверяется ДО срабатывания триггера ? |
||
15 фев 16, 11:23 [18816942] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8353 |
Северянин, а чем дефолт не подходит? |
15 фев 16, 11:24 [18816947] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
|
||||
15 фев 16, 11:29 [18816971] Ответить | Цитировать Сообщить модератору |
Северянин Member Откуда: Сообщений: 90 |
Glory, Прошу прощения. Неверно интерпретировал Ваше замечание. |
15 фев 16, 11:29 [18816978] Ответить | Цитировать Сообщить модератору |
Северянин Member Откуда: Сообщений: 90 |
У последовательности есть (может быть) явное преимущество перед дефолтом: она дает уникальность в пределах базы. Кроме того, через нее с айдишниками можно поиграться на клиенте. Правда, на счет последнего не уверен, что это нужно, но вдруг? |
||
15 фев 16, 11:32 [18817001] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Уникальность дают только уникальные ключи. Все остальное - это ваши фантазии.
С ПК не надо играться. От слова совсем. Для создания чего-то вроде сквозной нумерации не надо использовать поле ПК. У ПК совсем другое предназначение. |
||||
15 фев 16, 11:36 [18817025] Ответить | Цитировать Сообщить модератору |
Северянин Member Откуда: Сообщений: 90 |
Тогда, получается, для формирования ПК, автоинкремент подходит лучше всего? Я погуглил данную тему, но нашел лишь статью про сравнения GUID и автоинкремента. Выходит, последовательности для других целей? |
15 фев 16, 11:41 [18817058] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Я бы сделал суррогатный ключ IDENTITY и не парился. |
||
15 фев 16, 11:45 [18817079] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Последовательность и identity - это инструменты. Как, например, простая и крестовая отвертки. Они обе предназначены для работы с "шурупами". Просто "шурупов" много разных, но не все же они у вас используются. |
||
15 фев 16, 11:46 [18817094] Ответить | Цитировать Сообщить модератору |
Северянин Member Откуда: Сообщений: 90 |
Если можно, последний вопрос: Есть ли минусы при использования последовательности для формирования ПК? |
15 фев 16, 11:54 [18817154] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Больше программного кода, например. Просто ваш вопрос некорректен. Если ваша задача требует использования последовательностей, то какой смысл справшивать о минусах ? |
||
15 фев 16, 11:59 [18817190] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
что-то все у вас сложно.insert into dbo.t (id, col) values (next value for dbo.seq, 'val'); |
15 фев 16, 12:04 [18817228] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8353 |
э-э вставьте получение элемента последовательности в дефолтное значение поля. Ограничения использования NEXT VALUE FOR записаны в справке. |
||||
15 фев 16, 12:09 [18817252] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
use tempdb; go create sequence dbo.seq1 as int start with 1; create table dbo.t (id int constraint PK_t primary key, v int); alter table dbo.t add constraint DF_t__id default (next value for dbo.seq1) for id; go insert into dbo.t (v) values (1), (2); select * from dbo.t; go drop table dbo.t; drop sequence dbo.seq1; go |
||
15 фев 16, 12:11 [18817272] Ответить | Цитировать Сообщить модератору |
Северянин Member Откуда: Сообщений: 90 |
Ребята, спасибо большое! Я все понял. |
15 фев 16, 13:29 [18817752] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |