跨多个表维护标识值

时间:2014-05-27 16:06:07

标签: sql-server tsql sql-server-2012 identity

我们遇到多个表中有一个名为Customer_Number的列的情况。此列是所有表中的标识列,但有一种方法可以使此列在所有表中都是唯一的。

例如,如果我在table_one中添加一行,而identity列现在将值赋值为1,如果有人在table_two,table_three或table_four的Customer_Number列中添加另一行,则应该为其分配2.

我怎么能这样做,我一直在线阅读,似乎我必须创建一个表来记录任何表的最后生成的值,并从该表中获取值的MAX()并添加1要获得下一个可用值,有没有更简单的方法呢?

1 个答案:

答案 0 :(得分:6)

我自己没有使用它,但我认为你需要新的Sequence Object

您将创建一个序列对象,而不是使用Identity值,只需从序列对象中获取下一个值。

创建序列对象

CREATE SEQUENCE Sqnc_Number_Generator AS INT   --<-- This can be Bigint as well
    START WITH   1  -- Start with value 1
    INCREMENT BY 1  -- Increment with value 1
    MINVALUE  1     -- Minimum value to start is 1
    MAXVALUE  50000 -- Maximum it can go to 5000
    NO CYCLE        -- Do not go above 5000
    CACHE 500        -- Increment 500 values in memory rather than incrementing from IO

获取下一个值

SELECT NEXT VALUE FOR dbo.Sqnc_Number_Generator AS NxtValue;

SQL FIDDLE