2

我们正在将一些进程从允许标识列的 Sql Server 数据库环境移动到不允许标识列的 Sql Server 数据库环境。我们如何在不使用身份构造的情况下有效地为代理主键创建唯一的整数值?

至于为什么我们不能使用标识列,微软的并行数据仓库在物理上不同的服务器之间拆分表。Microsoft 从 PDW 中删除了标识功能,因为您必须在所有服务器之间进行通信才能为分布式表中的每个插入找到新的标识值,这几乎否定了并行性的意义。

4

3 回答 3

1

在不知道为什么不能使用身份或如何使用身份(例如主键、记录计数、事件序列)的情况下,我不确定是否有人可以推荐特定的替代品。

也就是说,我认为您正在寻找创建一个序列。

SQL Server 2012 添加了序列

旧版本的 SQL Server 需要不同的 方法来实现这一点,尽管与本机标识或序列相比,它们都有缺点。

于 2013-06-14T15:49:26.623 回答
0

这是我使用过的一种技术。它并非没有缺点,但它确实可以在没有任何烦人的比赛条件的情况下完成工作。这是我对sql server 的回答:根据计数器和另一列值生成主键

于 2013-06-14T17:28:54.293 回答
0

我很想知道为什么您的新环境不允许标识列(并不是说没有充分的理由,但我以前从未遇到过这种情况)。

话虽如此,我能想到的最佳解决方案是在插入时使用触发器,找到伪标识列的最大值并加 1。

于 2013-06-14T15:41:12.847 回答