生成GUID

时间:2010-07-05 09:38:56

标签: sql-server guid

我正在考虑在使用SQL Server的.net应用程序中使用GUID。我应该编写一个存储过程,在输入的每条记录上生成GUID,还是应该直接从应用程序生成GUID。

提出问题的原因(如果错误地纠正了我):

我(作为/ pre)sume:

从数据库生成GUID时,您可以假设数据库会记住以前生成的GUID,因为应用程序很难记住它。

4 个答案:

答案 0 :(得分:25)

SQL Server内置了GUID的创建。无需为此编写单独的存储过程。

您可以使用

  

两个过程之间的主要区别在于,如果是主群集密钥,则应使用顺序GUID。

我不确定为什么您希望数据库引擎记住以前生成的GUID。

答案 1 :(得分:5)

不,你的假设是错误的:数据库不会记住任何东西 - 所以从这个观点来看没有任何好处。

如果您在SQL Server中使用GUID作为主键/群集键,那么开始时这是一个坏主意(请参阅hereherehere为什么会这样?情况),你应该至少使用newsequentialid()函数作为该列的默认约束。

CREATE TABLE YourTable(ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID()) 

这样,数据库会为你的PK生成伪顺序GUID,因此会使用GUID作为PK / CK的负面影响至少可以忍受......

如果您没有使用GUID作为主键,那么我认为在服务器上创建GUID没有任何好处。

答案 2 :(得分:3)

我的偏好是在应用程序中创建GUID而不是db。

答案 3 :(得分:-1)

RFC4122 1:«不要以为UUID难以猜测;例如,它们不应被用作安全功能(仅仅拥有访问权限的标识符)。可预测的随机数源会加剧这种情况»。

更简单的任务增量uint64。

不使用GUID!如果需要安全。

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b37b3438-90f4-41fb-adb9-3ddba16fe07c