几年前,当我开始从事复制工作时,我确信Identity Range Management仅在最近的SQL Server中用于遗留目的,因为在SQL Server 2000之前,GUID类型字段不存在且大多数主键是建立在自动增量字段上的。
我已经看到其中一些数据库“正在运行”,我可以说在复杂的复制拓扑中管理这些身份范围可以是一个真正的PITA,具有保证的头痛和整晚的调试会话。
我刚刚在这里读到Identity Range Management was still proposed as default with SQL Server 2008,然后是this other question on Best Practises and Identity Range Management,其中#mwolfe02得出的结论是,在某些情况下,用户无法在数据库中插入数据,除非他们被授予db owner权限! / p>
令人不安,不是吗。因此,除遗留数据库外,为什么有人会将身份范围管理与SQL Server一起使用?为了更通用的方式,为什么有人会在数据库中推广任何预定的\ autoincrement识别方法?
答案 0 :(得分:1)
我想继续使用标识值的原因之一是因为在数据库中使用GUID作为主键的缺点,这里记录了GUIDs as PRIMARY KEYs。
我个人从未使用复杂的复制拓扑,并且在设置复制时始终使用整数。我通过调整身份函数的增量值来管理身份范围,所以如果我在复制中有两个服务器,我将在一个上使用奇数,在另一个上使用偶数并增加2.相同的设置适用于多个服务器,增量设置等于服务器数量。
我也会在整数的最小数字(-2,147,483,648到2,147,483,647)处开始我的标识范围,因为有很多值不能用作整数标识列,而不是一次启动。即使您涉及20个服务器,仍然可以使用相当多的值。