Sql server 生成GUID
我正在考虑在使用SQL Server的.net应用程序中使用GUID。我应该编写一个存储过程,在输入的每个记录上生成GUID,还是直接从应用程序生成GUID 提出问题的原因(如果我错了,请纠正我): I(作为/预先)总结:Sql server 生成GUID,sql-server,guid,Sql Server,Guid,我正在考虑在使用SQL Server的.net应用程序中使用GUID。我应该编写一个存储过程,在输入的每个记录上生成GUID,还是直接从应用程序生成GUID 提出问题的原因(如果我错了,请纠正我): I(作为/预先)总结: 当从数据库生成GUID时,您可以假设DB会记住以前生成的GUID,因为应用程序很难记住它。不,您的假设是错误的:数据库不会记住任何东西-因此从这个角度看没有好处 如果在SQL Server中使用GUID作为主键/群集键,这是一个不好的开始(请参阅,或说明原因),则至少应将该函
当从数据库生成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很重要或是必需的?如果要将GUID用作数据库中的主键,请注意利弊;)我可以想到一些有效的业务案例,其中使用(顺序)GUID将是一个不错的选择。阿莫夫,如果我们几年前就知道我们现在知道的,我们很可能已经实现了它们,并在尝试与我们的总部交换数据时为我们节省了很多麻烦(和金钱)。@lieven:看来你在谈论复制-这可能是你真正需要它们的唯一有效案例。让它们成为你的PK,但如果可能的话,使用其他东西作为你的集群密钥@谢谢你。但是如果服务器重新启动呢??!我知道你会失去理智的。我错了吗?