我读过,在 SQL Server 2000 之后,删除了“取消标识”标识列的能力。而且这是“按设计”(不仅仅是缺失的功能)。
这是我在博客上找到的一个例子。它涉及更新系统表。(并且在 SQL Server 2000 之后删除了该功能。)我认为通过系统表执行此操作不是一个好主意。我只是想知道为什么没有以另一种方式执行此操作的功能。
解决这个问题会给我带来大量的工作。(在不容忍停机的环境中将数亿行复制到新表中。)
所以我想我会问“为什么”。
Sql Server 2005 和更高版本中的哪些更改使这成为一件坏事?或者它总是很糟糕,只是没有被锁定?
再次将标识列设为普通列会违反什么“最佳实践”(或类似原则)?
——
更新以回答“我为什么这样做”的请求:
这是一个非常高级的摘要:我将开始向我的表添加分区。(这样我就可以存档/清除旧数据。)这很容易。但我偶尔需要将记录移动到不同的分区,这样它就不会被删除(当一个分区出现进行归档/删除时)。(我的分区列增加了 2,以便始终有空间将行移动到不同的分区。)
但是如果分区列是标识列,那么我必须删除并重新插入值(没有办法更新标识列的值)。这会导致复制问题。
所以我想使用序列而不是标识列。但是这种切换在大型数据库上非常困难。