几年前,当我开始从事复制工作时,我确信身份范围管理只在最近的SQL Server中用于遗留目的,因为在SQL Server 2000之前,GUID类型字段不存在,并且大多数主键都建立在自增字段上。
我已经看到其中一些数据库在"工作",我可以说,在复杂的复制拓扑中管理这些标识范围可能是一项真正的PITA,有保证的头痛和通宵的调试会话。
我刚刚在这里读到,身份范围管理仍然被提议作为SQL Server 2008的默认设置,然后是关于最佳实践和身份范围管理的另一个问题,其中#mwolfe02得出的结论是,在某些情况下,用户不能在数据库中插入数据,除非他们被授予数据库所有者的权利!
令人不安,不是吗?那么,除了遗留数据库之外,为什么有人要在SQL Server中使用身份范围管理?以一种更通用的方式,为什么有人会在数据库中推广任何预先确定的\自动增量识别方法?
我想继续使用标识值的原因之一是因为在数据库中使用GUID作为主键的缺点,这里将GUID作为primary KEY进行了说明。
我个人从未使用过复杂的复制拓扑,在设置复制时总是使用整数。我通过调整标识函数的增量值来管理标识范围,因此,如果我在复制中有两个服务器,我会在一个服务器上使用奇数,在另一个服务器中使用偶数,然后增量2。相同的设置适用于多个服务器,增量设置等于服务器数量。
我也会从整数的最低数字(-2147483648到2147483647)开始我的标识范围,因为有很多值没有被使用,因为整数标识列通常从一开始。即使您有20台服务器,仍然可以为您提供一系列可供使用的值。