Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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
如果未提供新的GUID,请在SQL Server中生成新的GUID_Sql_Sql Server - Fatal编程技术网

如果未提供新的GUID,请在SQL Server中生成新的GUID

如果未提供新的GUID,请在SQL Server中生成新的GUID,sql,sql-server,Sql,Sql Server,我正在更新数据库,以便为表中的每条记录提供一列GUID 此表由多个不同的源填充,其中一些源不会为新记录提供GUID 只有在没有为新记录传入值的情况下,如何在DB端使用newid()填充此列?您可以将列的默认值设置为newid()。然后,仅当尚未创建和分配GUID时,才会创建和分配GUID。请勿重复,请勿将默认列设置为NEWID()。如果你这样做,你得到的GUID将是完全随机的,如果你在这个列上有任何类型的索引,它将是无用的。如果要执行此操作,请将列默认值设置为NEWSEQUENTIALID()

我正在更新数据库,以便为表中的每条记录提供一列GUID

此表由多个不同的源填充,其中一些源不会为新记录提供GUID


只有在没有为新记录传入值的情况下,如何在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插入堆表中?我的意思是,在该表中的该列上没有索引,有一个索引-只是不会在该列上