0
我目前有一个表,Messages
。 ID
列是主键,并使用标识填充。将主键身份替换为从下一个AUTO_INCREMENT值开始的序列
x-----------------------------x
| ID | Contents |
x-------------|---------------x
| 1 ||
| 2 | 56789 |
x-----------------------------x
我想删除的ID
列的身份,并通过从序列,Messages_ID_Sequence
填充的ID
默认值替换它。
这很容易在SSDT中完成。然而,当我部署数据库项目,在Messages_ID_Sequence
的第一个值是1。这是显而易见的,为什么当我在看的Messages_ID_Sequence
生成的SQL:
CREATE SEQUENCE [dbo].[CommandMsgs_MSGID_Sequence]
AS BIGINT
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO CYCLE
CACHE 10
当我尝试插入一个新的留言记录的问题发生。序列中的第一个值1填充新记录的ID列,并导致违反主键约束。
那么我怎样才能确保在创建Messages_ID_Sequence
时,它会从身份提供的下一个ID
开始? Messages_ID_Sequence
的创建脚本的构建操作必须设置为Build,因此该解决方案不能涉及任何SSDT无法理解的内容。
我什么时候可以执行此操作?作为部署后脚本?如果它被添加到我的部署后脚本中,它将在我每次发布数据库时执行。看起来并不一定是有害的,但考虑到每个环境只需要进行一次就是浪费。 –
您可以在创建序列后,在您的部署脚本上执行它。 –
我已经更新了答案,现在它直接创建序列,因此您只需在更新数据库时调用它一次。 –