我正在考虑在使用SQL Server的.net应用程序中使用GUID。我应该编写一个存储过程,在输入的每条记录上生成GUID,还是应该直接从应用程序生成GUID。
提出问题的原因(如果错误地纠正了我):
我(作为/ pre)sume:
从数据库生成GUID时,您可以假设数据库会记住以前生成的GUID,因为应用程序很难记住它。
答案 0 :(得分:25)
SQL Server内置了GUID的创建。无需为此编写单独的存储过程。
您可以使用
两个过程之间的主要区别在于,如果是主群集密钥,则应使用顺序GUID。
我不确定为什么您希望数据库引擎记住以前生成的GUID。
答案 1 :(得分:5)
不,你的假设是错误的:数据库不会记住任何东西 - 所以从这个观点来看没有任何好处。
如果您在SQL Server中使用GUID作为主键/群集键,那么开始时这是一个坏主意(请参阅here,here或here为什么会这样?情况),你应该至少使用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