В настоящее время у меня есть таблица, Messages
. Столбец ID
является первичным ключом и заполняется с использованием Identity.Заменить первичный ключ Идентификация с последовательностью, начинающейся со следующего значения AUTO_INCREMENT
x-----------------------------x
| ID | Contents |
x-------------|---------------x
| 1 ||
| 2 | 56789 |
x-----------------------------x
Я хочу, чтобы удалить идентичность на ID
колонки и заменить его заселение значения по умолчанию ID
из последовательности, Messages_ID_Sequence
.
Этого достаточно легко сделать в SSDT. Тем не менее, когда я развернуть проект базы данных, первое значение в Messages_ID_Sequence
равно 1. Это понятно, почему, когда я смотрю на SQL, сгенерированный для Messages_ID_Sequence
:
CREATE SEQUENCE [dbo].[CommandMsgs_MSGID_Sequence]
AS BIGINT
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO CYCLE
CACHE 10
Проблема происходит, когда я пытаюсь вставить новую запись сообщений. Первое значение из последовательности, 1, заполняет столбец идентификатора новой записи и вызывает нарушение ограничения первичного ключа.
Итак, как я могу гарантировать, что при создании Messages_ID_Sequence
он начнется со следующего ID
, который предоставил бы идентификатор? Для сценария создания на сценарии создания Messages_ID_Sequence
должно быть установлено значение Build, чтобы решение не могло включать ничего, что SSDT не понимает.
Когда я это выполнил? Как сценарий после развертывания? Если он добавлен в мои сценарии после развертывания, он будет выполняться каждый раз при публикации базы данных. Это не похоже, что это обязательно будет вредно, но это расточительно, учитывая, что это нужно делать только один раз для среды. –
Вы можете выполнить его на своем сценарии развертывания сразу после создания последовательности. –
Я обновил ответ, поэтому теперь он непосредственно создает последовательность, поэтому вам нужно только позвонить его один раз при обновлении базы данных. –