【发布时间】:2013-08-30 14:28:08
【问题描述】:
我已经使用了很长时间,但是我无法找到关于何时不能保证唯一的明确解释。这是我的cmets,如果你认为合适,请更正。
保证值在创建它的机器上是唯一的(已创建)。因此,一台机器上的 .net 应用程序生成的 GUID 永远不会与同一台机器上的 SQL Server 创建的 GUID 冲突。
在所有其他情况下,我们无法保证。从理论上讲,如果不同计算机上的数据库中的唯一标识符字段有多个创建源(例如不同计算机上的应用程序),则总是有可能插入重复项。
编辑:抱歉没有正确地提出问题。我想我想知道在同一台机器上与不同机器上生成冲突的概率,如果使用 c# 的 Guid.NewGuid()、SQL Server 的 newid()、newsequentialid() 函数或不同应用程序的任何其他函数。 “已回答”链接有一个回复,其中说他实际上遇到了发生这种情况的案例。让你想知道这种情况发生的频率有多高。
如果我有一个带有 uniqueidentifier 字段作为 pk 的表,我是否必须在每次通过不同的应用程序或 SQL Server 的函数创建一个新值进行插入时检查唯一性?
【问题讨论】:
-
您应该阅读 Eric Lippert 的 GUID 指南 系列:blogs.msdn.com/b/ericlippert/archive/tags/guids
-
或至少 RFC - apps.ietf.org/rfc/rfc4122.html
-
我很确定您不是在询问
uniqueidentifier数据类型。您可能会询问newid函数,或者newsequentialid函数。这两个函数的答案是完全不同的,如果你的意思是别的,可能也不同。
标签: c# .net sql-server sqldatatypes