如果未提供新的GUID,请在SQL Server中生成新的GUID
我正在更新数据库,以便为表中的每条记录提供一列GUID 此表由多个不同的源填充,其中一些源不会为新记录提供GUID如果未提供新的GUID,请在SQL Server中生成新的GUID,sql,sql-server,Sql,Sql Server,我正在更新数据库,以便为表中的每条记录提供一列GUID 此表由多个不同的源填充,其中一些源不会为新记录提供GUID 只有在没有为新记录传入值的情况下,如何在DB端使用newid()填充此列?您可以将列的默认值设置为newid()。然后,仅当尚未创建和分配GUID时,才会创建和分配GUID。请勿重复,请勿将默认列设置为NEWID()。如果你这样做,你得到的GUID将是完全随机的,如果你在这个列上有任何类型的索引,它将是无用的。如果要执行此操作,请将列默认值设置为NEWSEQUENTIALID()
只有在没有为新记录传入值的情况下,如何在DB端使用newid()填充此列?您可以将列的默认值设置为
newid()
。然后,仅当尚未创建和分配GUID时,才会创建和分配GUID。请勿重复,请勿将默认列设置为NEWID()
。如果你这样做,你得到的GUID将是完全随机的,如果你在这个列上有任何类型的索引,它将是无用的。如果要执行此操作,请将列默认值设置为NEWSEQUENTIALID()
金伯利·特里普在这个问题上有一个和另一个观点
要默认实现NEWSEQUENTIALID()
:
CREATE TABLE foo
(unq_id UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(),
cola varchar(10));
.将列的默认值设置为
NEWID()
?因此,如果值不存在,那么NEWID()将填充它而不是覆盖它?是的,这会更好,但请注意,对于大多数GUI来自应用程序的情况(谁知道它们是如何生成的)来说,这并没有帮助.此表上没有索引,我不关心它是否是连续的。最终,我将始终提供GUID值,这可能来自另一个系统,它是唯一的值,而不总是GUID,因此我将此字段作为NVARCHAR,以使其更加灵活。说索引没有用处是一个很大的延伸。拥有一个有碎片问题的索引比没有必要的索引要好得多。但对于有效的解决方案,仍然是+1。因此,如果我在@Slee中正确地读取了这个值,那么您正在将非顺序GUID数据作为NVARCHAR插入堆表中?我的意思是,在该表中的该列上没有索引,有一个索引-只是不会在该列上