Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 生成GUID_Sql Server_Guid - Fatal编程技术网

Sql server 生成GUID

Sql server 生成GUID,sql-server,guid,Sql Server,Guid,我正在考虑在使用SQL Server的.net应用程序中使用GUID。我应该编写一个存储过程,在输入的每个记录上生成GUID,还是直接从应用程序生成GUID 提出问题的原因(如果我错了,请纠正我): I(作为/预先)总结: 当从数据库生成GUID时,您可以假设DB会记住以前生成的GUID,因为应用程序很难记住它。不,您的假设是错误的:数据库不会记住任何东西-因此从这个角度看没有好处 如果在SQL Server中使用GUID作为主键/群集键,这是一个不好的开始(请参阅,或说明原因),则至少应将该函

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

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

I(作为/预先)总结:


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

不,您的假设是错误的:数据库不会记住任何东西-因此从这个角度看没有好处

如果在SQL Server中使用GUID作为主键/群集键,这是一个不好的开始(请参阅,或说明原因),则至少应将该函数用作该列的默认约束

CREATE TABLE YourTable(ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID()) 
这样,数据库将为您的PK生成伪顺序GUID,从而使将GUID用作PK/CK的负面影响至少可以承受


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

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

你可以用

这两个过程之间的关键区别在于,如果序列GUID用于主群集密钥,则应使用它


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

我的首选是在应用程序中而不是数据库中创建GUID

  • 简化插入后的行检索
  • 更容易的域/业务层单元测试
  • 更快。至少对于实体框架
RFC4122:«不要假设UUID很难猜测;例如,它们不应被用作安全功能(仅拥有就可以访问的标识符)。一个可预测的随机数源会加剧这种情况

在简单任务中,增量uint64更好

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


为什么记住以前的GUID很重要或是必需的?如果要将GUID用作数据库中的主键,请注意利弊;)我可以想到一些有效的业务案例,其中使用(顺序)GUID将是一个不错的选择。阿莫夫,如果我们几年前就知道我们现在知道的,我们很可能已经实现了它们,并在尝试与我们的总部交换数据时为我们节省了很多麻烦(和金钱)。@lieven:看来你在谈论复制-这可能是你真正需要它们的唯一有效案例。让它们成为你的PK,但如果可能的话,使用其他东西作为你的集群密钥@谢谢你。但是如果服务器重新启动呢??!我知道你会失去理智的。我错了吗?