Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Последовательность: вставка через триггер или вручную.  [new]
Северянин
Member

Откуда:
Сообщений: 90
MS SQL 2012
Раньше использовал в качестве первичного ключа автоинкремент. В новой задаче хочу использовать последовательность.
Как лучше сделать: запихать NEXT VALUE FOR в триггер на вставку (если честно, не люблю триггеры) или предварительно вычислять, а затем уже вставлять вместе с другими данными. Есть ли какие подводные камни в этих технологиях, или без разницы? Да, и если есть ссылка на статью (без воды) по данному вопросу, буду весьма признателен.
P.S.
Не пинайте сильно за терминологию. Ещё только осваиваю сию науку.
15 фев 16, 11:13    [18816875]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Северянин
Как лучше сделать: запихать NEXT VALUE FOR в триггер на вставку (если честно, не люблю триггеры

И как вы сможете добавить запись с ПК, значение которого неизвестно на момент добавления ?
15 фев 16, 11:17    [18816902]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Северянин
Member

Откуда:
Сообщений: 90
Glory,
Значит все-таки триггер?
15 фев 16, 11:20    [18816919]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Северянин
Glory,
Значит все-таки триггер?

Вы прикидываетесь ?
Или вы про INSTEAD OF триггер ?
Иначе как вы сможете "попасть" в триггер, если значение для ПК проверяется ДО срабатывания триггера ?
15 фев 16, 11:23    [18816942]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8353
Северянин,

а чем дефолт не подходит?
15 фев 16, 11:24    [18816947]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
Владислав Колосов
а чем дефолт не подходит?
Северянин
В новой задаче хочу использовать последовательность.
15 фев 16, 11:29    [18816971]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Северянин
Member

Откуда:
Сообщений: 90
Glory,
Прошу прощения. Неверно интерпретировал Ваше замечание.
15 фев 16, 11:29    [18816978]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Северянин
Member

Откуда:
Сообщений: 90
Владислав Колосов
Северянин,

а чем дефолт не подходит?

У последовательности есть (может быть) явное преимущество перед дефолтом: она дает уникальность в пределах базы. Кроме того, через нее с айдишниками можно поиграться на клиенте. Правда, на счет последнего не уверен, что это нужно, но вдруг?
15 фев 16, 11:32    [18817001]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Северянин
У последовательности есть (может быть) явное преимущество перед дефолтом: она дает уникальность в пределах базы

Уникальность дают только уникальные ключи. Все остальное - это ваши фантазии.

Северянин
Кроме того, через нее с айдишниками можно поиграться на клиенте.

С ПК не надо играться. От слова совсем. Для создания чего-то вроде сквозной нумерации не надо использовать поле ПК. У ПК совсем другое предназначение.
15 фев 16, 11:36    [18817025]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Северянин
Member

Откуда:
Сообщений: 90
Тогда, получается, для формирования ПК, автоинкремент подходит лучше всего?
Я погуглил данную тему, но нашел лишь статью про сравнения GUID и автоинкремента.
Выходит, последовательности для других целей?
15 фев 16, 11:41    [18817058]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
Северянин
Выходит, последовательности для других целей?
Ну раз с ними возни больше, то, наверно, да.
Я бы сделал суррогатный ключ IDENTITY и не парился.
15 фев 16, 11:45    [18817079]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Северянин
Выходит, последовательности для других целей?

Последовательность и identity - это инструменты. Как, например, простая и крестовая отвертки.
Они обе предназначены для работы с "шурупами". Просто "шурупов" много разных, но не все же они у вас используются.
15 фев 16, 11:46    [18817094]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Северянин
Member

Откуда:
Сообщений: 90
Если можно, последний вопрос:
Есть ли минусы при использования последовательности для формирования ПК?
15 фев 16, 11:54    [18817154]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Северянин
Есть ли минусы при использования последовательности для формирования ПК?

Больше программного кода, например.

Просто ваш вопрос некорректен. Если ваша задача требует использования последовательностей, то какой смысл справшивать о минусах ?
15 фев 16, 11:59    [18817190]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
o-o
Guest
что-то все у вас сложно.
insert into dbo.t (id, col) 
  values (next value for dbo.seq, 'val'); 
15 фев 16, 12:04    [18817228]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8353
Северянин
Владислав Колосов
Северянин,

а чем дефолт не подходит?

У последовательности есть (может быть) явное преимущество перед дефолтом: она дает уникальность в пределах базы. Кроме того, через нее с айдишниками можно поиграться на клиенте. Правда, на счет последнего не уверен, что это нужно, но вдруг?


э-э вставьте получение элемента последовательности в дефолтное значение поля. Ограничения использования NEXT VALUE FOR записаны в справке.
15 фев 16, 12:09    [18817252]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Последовательность: вставка через триггер или вручную.  [new]
Северянин
Member

Откуда:
Сообщений: 90
Ребята, спасибо большое!
Я все понял.
15 фев 16, 13:29    [18817752]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить