Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨多个SQL Server的唯一ID_Sql_Uniqueidentifier - Fatal编程技术网

跨多个SQL Server的唯一ID

跨多个SQL Server的唯一ID,sql,uniqueidentifier,Sql,Uniqueidentifier,我正在开发一些软件,将在全国各地的多个实例中使用。像许多使用登录的软件一样,我需要每个用户都有一个唯一的ID。软件的每个实例都需要完全独立地运行,但最终合并几个数据库的可能性很高。在这种情况下,我希望每个用户的ID在所有服务器上都是唯一的 如果服务器之间没有通信,它们只为局域网提供服务,我认为也许可以从精确到毫秒的时间戳生成一个ID。在用户池只有数千而不是数百万的情况下,一个用户与另一台服务器上的另一个用户在同一毫秒内被创建的几率非常低 是否真的有任何方法可以保证所有服务器之间都有一个唯一的ID

我正在开发一些软件,将在全国各地的多个实例中使用。像许多使用登录的软件一样,我需要每个用户都有一个唯一的ID。软件的每个实例都需要完全独立地运行,但最终合并几个数据库的可能性很高。在这种情况下,我希望每个用户的ID在所有服务器上都是唯一的

如果服务器之间没有通信,它们只为局域网提供服务,我认为也许可以从精确到毫秒的时间戳生成一个ID。在用户池只有数千而不是数百万的情况下,一个用户与另一台服务器上的另一个用户在同一毫秒内被创建的几率非常低


是否真的有任何方法可以保证所有服务器之间都有一个唯一的ID,而不需要在它们之间进行通信?

您是否尝试过GUID字段类型?

是的,您可以通过使用自动递增的ID来实现这一点,该ID的增量是您拥有的服务器数量的倍数,但从一个不同的数字开始

例如,如果您有3个数据库:

Server 1: IDs increment by 3 starting from 1 E.g. 1, 4, 7, 10
Server 2: IDs increment by 3 starting from 2 E.g. 2, 5, 8, 11
Server 3: IDs increment by 3 starting from 3 E.g. 3, 6, 9, 12
使用16字节的数据类型

例如

SELECT NEWID()
GO
-- This will return a new random uniqueidentifier e.g.
E75B92A3-3299-4407-A913-C5CA196B3CAB
在变量中选择此Guid

--assign uniqueidentifier in a variable
DECLARE @EmployeeID uniqueidentifier
SET @EmployeeID = NEWID()
You can directly use this with INSERT statement to insert new row in table.
-在Employees表中插入数据

INSERT INTO Employees
(EmployeeID, Name, Phone)
VALUES
(NEWID(), 'John Kris', '99-99999')

例如,如果您想了解更多信息,UUID GUID最适合您的案例,这是一个不同但聪明的想法。你必须知道你已经安装了多少个实例来填充3,并且它们是固定的。+1因为这是一个有趣的想法,但是-1因为它的数量非常有限implementations@Doozer:是的,但是你可以选择一个足够高的乘数,比如20,它最多可以容纳20台服务器。。。你不必使用所有的ID。@BG100是的,我明白了。在某个时候,你可能会遇到规模问题。我猜这一切都取决于OP在多个例子中的含义。@BrianRoach:把自己画到路的一个角落里——我很难想象这一点;谢谢你的链接和例子!