我有一个ASP.NET应用程序,它通过C#在代码隐藏中生成GUID。这些GUID通过以下方式生成:
Guid id = Guid.NewGuid();
此GUID稍后存储在SQL Server 2008数据库中。我还有一个存储过程将更新该记录。我想在存储过程中生成一个GUID,其格式与ASP.NET中生成的格式相同。
有人可以告诉我怎么做吗?
谢谢!
答案 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。