我们正在将一些进程从允许标识列的 Sql Server 数据库环境移动到不允许标识列的 Sql Server 数据库环境。我们如何在不使用身份构造的情况下有效地为代理主键创建唯一的整数值?
至于为什么我们不能使用标识列,微软的并行数据仓库在物理上不同的服务器之间拆分表。Microsoft 从 PDW 中删除了标识功能,因为您必须在所有服务器之间进行通信才能为分布式表中的每个插入找到新的标识值,这几乎否定了并行性的意义。
我们正在将一些进程从允许标识列的 Sql Server 数据库环境移动到不允许标识列的 Sql Server 数据库环境。我们如何在不使用身份构造的情况下有效地为代理主键创建唯一的整数值?
至于为什么我们不能使用标识列,微软的并行数据仓库在物理上不同的服务器之间拆分表。Microsoft 从 PDW 中删除了标识功能,因为您必须在所有服务器之间进行通信才能为分布式表中的每个插入找到新的标识值,这几乎否定了并行性的意义。
这是我使用过的一种技术。它并非没有缺点,但它确实可以在没有任何烦人的比赛条件的情况下完成工作。这是我对sql server 的回答:根据计数器和另一列值生成主键
我很想知道为什么您的新环境不允许标识列(并不是说没有充分的理由,但我以前从未遇到过这种情况)。
话虽如此,我能想到的最佳解决方案是在插入时使用触发器,找到伪标识列的最大值并加 1。