SQL Server中的GUIDs

3

我有一个ASP.NET应用程序,通过C#在代码后台生成GUID。这些GUID是通过以下方式生成的:

Guid id = Guid.NewGuid();

这个GUID稍后将存储在SQL Server 2008数据库中。我还有一个存储过程将更新该记录。我希望在存储过程中生成一个与在ASP.NET中生成的格式相同的GUID。

请问有人能告诉我如何做到这一点吗?

谢谢!


“在相同的格式中”是什么意思?GUID 是二进制的 - 由一系列 16 字节组成。 - Tim Rogers
6个回答

7

使用NEWID()方法

DECLARE @ID uniqueidentifier
SET @ID = NEWID()

1
如果这是用于集群索引(通常是主键),我强烈推荐使用 NEWSEQUENTIALID()(适用于 SQL Server 2005 及以上版本),因为在这种情况下,NEWID() 会创建一个碎片化的索引,而真正的随机性并不好。

1
newsequentialid() 只能作为列的默认约束条件指定 - 你不能直接调用它。 - marc_s

0

0

从你提问的方式来看,我猜测你是将GUID存储在数据库的文本字段(例如VARCHAR)中 - 如果是这种情况,那么你应该使用uniqueidentifier类型,然后可以使用NEWID() SQL函数生成新的GUID。

请参阅C# guid and SQL uniqueidentifier以获取有关如何在SQL Server数据库中存储GUID的更多详细信息。


0

你可以使用NEWID()

但是,使用此方法生成的GUID存在索引问题。相反,你应该使用comb算法

CAST(CAST(NEWID() AS BINARY(10)) +
    CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER)

请确保将这些存储在 UNIQUEIDENTIFIER 类型的列中,而不是转换为 NVARCHAR 或其他任何类型。


0

您可以使用NEWSEQUENTIALID来获得更好的索引支持,但缺点是您只能将此函数用作列的默认值表达式。

您可以尝试使用以下内容:

INSERT INTO MyTABLE (...) OUTPUT inserted.GUIDCOLUMN INTO @tableVar VALUES (...)

访问新生成的顺序 ID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接