我们刚刚从 SQL Server 2008 R2 切换到 SQL Server 2012。我遇到了标识列的问题:
每当我重新启动 SQL Server 时,每个标识列的种子值都会增加 1000(对于int
标识列是 1000,对于bigint
它是 10,000)。例如,如果表的下一个int
标识值是 3,那么在重新启动 SQL Server 后它将是 1003。如果我再次重新启动 SQL Server,它将是 2003,以此类推。
在谷歌搜索后,我发现它是 SQL Server 2012 中的一个新功能(不知道它的用途),如果您想要旧的身份行为,只有两种解决方案:
使用序列对象
这对我来说是不可能的,因为:
a) 我在 SQL Server 2008 和 2012 中使用相同的数据库。我不能在 2008 中使用序列。
b) 如果我使用序列,那么我需要更改每个表的保存过程,这对我们来说将是一项繁重的任务。
使用跟踪标志 272 (-T272)
我可以使用此解决方案,因为无需对我的应用程序进行任何更改。有人建议添加-T272
作为启动参数,之后此 SQL Server 标识将像在以前的版本中一样工作。我做了同样的事情,但它不起作用。
我不想对我的数据库结构进行任何更改。请提出解决方案或解释为什么-T272
不起作用。