Rod*_*o M 6 sql-server sql-server-2008
背景:
这是一个多租户应用程序,因此普通身份列将不起作用。所有表都有一个唯一的客户端标识符 Clients.id。所以每个客户可以有很多客户。为简单起见,下面不包括此列。
我们希望生成一个从 1000 开始的唯一客户编号。
我们将当前(最后)生成的数字存储在名为 的表中Master。让我们说Master.CustomerNumber。所以数字会变成 1001、1002 等,最后一个存储在那里。
所以每次我们添加一个客户时,我们都会有一个查询来查找当前值,增加它,然后将它插入到Customer.Number.
注意:我们使用的是 SQL Server 2008。我们在一个集群中有多个服务器。
确保如果同时添加两个客户,每个客户都获得唯一客户编号的最佳方法是什么?存储过程、锁定、CFLOCKING?
我如何确保这个进程是“单线程”的,并且不会发出两次相同的数字?
我确实有一个唯一的索引Customer.Number+Clients.id。我对如何在生成时保证唯一性的实现感兴趣。
您想使用 a Sequence,例如:
CREATE SEQUENCE Customer_Number_Seq
AS INTEGER
START WITH 1
INCREMENT BY 1
MINVALUE 1000
MAXVALUE 100
CYCLE;
Run Code Online (Sandbox Code Playgroud)
然后可能是这样的:
CREATE TABLE Customers
(customer_nbr INTEGER DEFAULT NEXT VALUE FOR Customer_Number_Seq,
.... other columns ....
Run Code Online (Sandbox Code Playgroud)
该文档有更多详细信息。