2010-07-05 43 views
12

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

理由问这个问题(如果我错了纠正我在这个):

我(AS /预)庙:

当从数据库中生成的GUID,你可以假设DB记住以前生成的GUID作为应用程序记住它很困难。

+1

为什么记住以前的GUID是重要还是必需的? – 2010-07-05 09:58:11

+2

如果您使用GUID作为数据库中的主键,请注意其优缺点;) http://www.codinghorror.com/blog/2007/03/primary-keys-ids-versus- guids.html – Tony 2010-07-05 10:52:21

回答

22

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

您可以使用

两个程序之间的主要区别将是连续GUID应该使用,如果它是一个主要的集群键。

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

5

不,你的假设是错误的:数据库不会记住任何事情 - 所以从这个角度来看没有任何好处。

如果您正在使用GUID在SQL Server的主键/聚集键,这是一个坏主意,开始(见hereherehere为什么是这种情况),你应该至少使用newsequentialid()作为该列的默认约束。

CREATE TABLE YourTable(ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID()) 

这样一来,该数据库将产生伪连续GUID对您的PK,从而将使使用GUID作为PK/CK至少可以忍受....

如果你”的负面影响不要使用GUID作为主键,那么我真的没有看到在服务器上创建GUID的好处。

+0

我能想到一些有效的商业案例,使用(顺序)GUID将是一个不错的选择。 AMOF,如果我们几年前知道我们现在知道的,我们很可能已经实施了它们并为我们节省了很多麻烦(和金钱),试图与我们的分支机构来回交换数据。 – 2010-07-05 10:03:04

+1

@lieven:似乎你在谈论复制 - 这可能是你真正需要它们的唯一有效案例。让他们成为你的PK,但如果可能的话,使用别的东西作为你的群集键! – 2010-07-05 10:16:30

+0

@marc_s谢谢。但是如果服务器重新启动呢?!我知道你会失去你的顺序。我错了吗 ? – 2014-09-30 07:09:15