对我来说,MSSQL Server的自动增量标识列无法按我的预期工作是我的突然麻烦。
不保证顺序一致。我的意思是,如果重新启动服务器时像1, 2, 3, 4, 5
一样,可以像10006, 10007, 10008, 10009, 10010
一样轻松继续。如果您使用这些编号生成了一些文档(比如说合同),则可能导致您的公司签订了编号为1, 2, 3, 4, 5
的合同,然后意外更改为10006, 10007, 10008, 10009, 10010
。
在其他RDBM上,自动增量列始终保持一致性,并且无论是否重新启动它都没关系。
所以现在我想更改要由序列提供服务的列。问题是如何才能最大程度地平滑?我使用实体框架及其迁移机制。
该列定义为:
CREATE TABLE [dbo].[
-- omitted for the sake of brevity
[CompanyNo] [bigint] IDENTITY(1,1) NOT NULL
-- omitted for the sake of brevity
);
我最好的猜测是创建迁移:
CompanyNo
的当前最新值技术:
我的建议是在表中添加一个时间戳列,该列在逻辑上记录何时添加给定记录。然后,当您想生成序列时,可以使用ROW_NUMBER
快速执行:
SELECT *, ROW_NUMBER() OVER (ORDER BY ts_col) seq FROM yourTable;
如果您需要有保证的有序序列,则不应依赖于自动递增列,因为它不是用于此目的的。自动递增列的合同规定,生成的值将始终是唯一的且通常会增加,但不一定是连续的顺序。