2011-07-25 39 views
3

我有一个通过C#代码隐藏生成的GUID的ASP.NET应用程序。这些GUID通过以下方式生成:的GUID在SQL Server

Guid id = Guid.NewGuid(); 

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

有人可以告诉我如何做到这一点?

谢谢!

+0

你是什么意思“在相同的格式”是什么意思? GUID是二进制的 - 一系列16个字节。 –

回答

1

如果这是针对聚集索引(通常是主键),我强烈建议使用NEWSEQUENTIALID()(SQL Server 2005),因为在这种情况下,NEWID()会创建一个碎片索引,而且是真正的随机数。

+1

'newsequentialid()'只能被指定为列上的默认约束 - 您不能直接调用它。 –

+0

@Jesse非常好的建议 – Behnam

7

使用NEWID()方法

DECLARE @ID uniqueidentifier 
SET @ID = NEWID() 
0

你可以使用NEWID()

但是,也有与索引GUID的问题是这样产生的。相反,你应该使用comb algorithm

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

确保您在UNIQUEIDENTIFIER类型的列存储这些,而不是将它们转换为NVARCHAR或诸如此类的事。

0

我的猜测来自您提出问题的方式,即您将GUID存储在数据库中的文本(例如VARCHAR)字段中 - 如果是这种情况,则应该使用uniqueidentifier类型,其中您可以使用NEWID() SQL函数来生成新的GUID。

关于如何的GUID存储在SQL Server数据库详见C# guid and SQL uniqueidentifier

0

可以使用NEWSEQUENTIALID更好的索引支持,但缺点是,你可以使用这个功能只为您的列的默认值表达式。

您可以使用类似:

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

访问新生成的序列号。