我们遇到多个表中有一个名为Customer_Number的列的情况。此列是所有表中的标识列,但有一种方法可以使此列在所有表中都是唯一的。
例如,如果我在table_one中添加一行,而identity列现在将值赋值为1,如果有人在table_two,table_three或table_four的Customer_Number列中添加另一行,则应该为其分配2.
我怎么能这样做,我一直在线阅读,似乎我必须创建一个表来记录任何表的最后生成的值,并从该表中获取值的MAX()并添加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