我有一个ASP.NET应用程序,通过C#在代码后台生成GUID。这些GUID是通过以下方式生成的:
Guid id = Guid.NewGuid();
这个GUID稍后将存储在SQL Server 2008数据库中。我还有一个存储过程将更新该记录。我希望在存储过程中生成一个与在ASP.NET中生成的格式相同的GUID。
请问有人能告诉我如何做到这一点吗?
谢谢!
NEWSEQUENTIALID()
(适用于 SQL Server 2005 及以上版本),因为在这种情况下,NEWID()
会创建一个碎片化的索引,而真正的随机性并不好。newsequentialid()
只能作为列的默认约束条件指定 - 你不能直接调用它。 - marc_sSELECT NEWID()
示例可以在此处找到:http://msdn.microsoft.com/en-us/library/ms190348.aspx
从你提问的方式来看,我猜测你是将GUID存储在数据库的文本字段(例如VARCHAR
)中 - 如果是这种情况,那么你应该使用uniqueidentifier
类型,然后可以使用NEWID()
SQL函数生成新的GUID。
请参阅C# guid and SQL uniqueidentifier以获取有关如何在SQL Server数据库中存储GUID的更多详细信息。
你可以使用NEWID()
。
但是,使用此方法生成的GUID存在索引问题。相反,你应该使用comb算法:
CAST(CAST(NEWID() AS BINARY(10)) +
CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER)
请确保将这些存储在 UNIQUEIDENTIFIER
类型的列中,而不是转换为 NVARCHAR
或其他任何类型。
您可以使用NEWSEQUENTIALID来获得更好的索引支持,但缺点是您只能将此函数用作列的默认值表达式。
您可以尝试使用以下内容:
INSERT INTO MyTABLE (...) OUTPUT inserted.GUIDCOLUMN INTO @tableVar VALUES (...)
访问新生成的顺序 ID。