我如何自制一个标识栏?

时间:2013-06-14 15:33:45

标签: sql-server parallel-data-warehouse

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

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

3 个答案:

答案 0 :(得分:1)

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

那就是说,我认为你正在寻找一个序列。

SQL Server 2012添加了sequences

旧版本的SQL Server需要different methods来实现这一点,尽管它们与本机身份或序列相比都有垮台。

答案 1 :(得分:0)

我有兴趣了解为什么你的新环境不允许使用标识列(不是说没有充分的理由,但我以前从未遇到过这种情况)。

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

答案 2 :(得分:0)

这是我用过的一种技术。它并非没有瑕疵,但它确实可以在没有任何恼人的竞争条件的情况下完成工作。这是my answersql server: generate primary key based on counter and another column value