SQL Server中的GUID

时间:2011-07-25 16:31:50

标签: c# sql guid

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

Guid id = Guid.NewGuid();

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

有人可以告诉我怎么做吗?

谢谢!

6 个答案:

答案 0 :(得分:7)

使用NEWID()方法

DECLARE @ID uniqueidentifier
SET @ID = NEWID()

答案 1 :(得分:1)

如果这是针对聚簇索引(通常是主键),我强烈推荐NEWSEQUENTIALID()(SQL Server 2005上),因为NEWID()将在这种情况下创建一个碎片索引,真是随意的。

答案 2 :(得分:0)

这将为您生成一个GUID:SELECT NEWID()

可以在此处找到示例:http://msdn.microsoft.com/en-us/library/ms190348.aspx

答案 3 :(得分:0)

您可以使用NEWID()

但是,像这样生成的索引guid存在问题。相反,您应该使用comb algorithm

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

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

答案 4 :(得分:0)

我从您提出问题的方式猜测,您将GUID存储在数据库中的文本(例如VARCHAR)字段中 - 如果是这种情况,那么您应该使用{ {1}}输入在这种情况下,您可以使用uniqueidentifier SQL函数生成新的GUID。

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

答案 5 :(得分:0)

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

您可以使用以下内容:

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

访问新生成的序列ID。