2010-12-14 113 views
26

我很抱歉问什么似乎是一个疲惫的问题,但没有论坛的回应或我读过的文档似乎提供了一个合适的答案。MS SQL Server行GUID列

MS SQL Server 2008中Row GUID Column属性的用途是什么?

让我对此作出延伸。我已经看到“不要使用GUID作为PK”作为这个问题的答案,这似乎与我完全无关。如果我设置Row GUID Column是否强制将GUID列作为主键或其他?

要改写我原来的问题:如果我的表中有一个GUID列在编制索引时不起任何作用,那么我是否愿意将该GUID列设置为Row GUID Column

回答

33

它使您可以使用$ ROWGUID变量而不是列名称。它主要用于合并复制。 它不强制PK的GUID列,你只能显式声明PKs。 最后一个问题的答案是否定的,除非您计划实施合并复制。

+0

如此清晰,如此简洁,谢谢大家> _ <我完全惊讶,我无法找到这个问题的答案(相反,所有无关的讨论似乎都笼罩在其他论坛的有效答案上)感谢您的帮助! – instantmusic 2010-12-14 19:16:25

+1

不错。从FYI开始,它仅用于[FILESTREAM](https://msdn.microsoft.com/zh-cn/library/gg471497.aspx)功能:-)。 – 2016-06-07 01:48:59

1

RowGUID列用于复制。它允许复制引擎正确合并。当启用复制时,此列将被添加到尚未具有RowGUID列的表中。

除非您打算实施复制,否则您将无法使用它。它相当于将newsequentialid()设置为列的默认值。

0

这不是强制它成为主键,属性只是确定该字段是否会自动更新。如果您想在应用程序中创建GUID并将其发送,请将此属性设置为false,否则将其设置为true,并让数据库自动创建它。如果该字段是聚集索引,请确保默认值是NEWSEQUENTIALID()。

7

ROWGUIDCOLUMN主要用于需要将几个卫星数据库表的内容组合到一个中央数据库中的复制场景。

将ROWGUIDCOLUMN添加到正在复制的表中可确保复制引擎可以使用ROWGUIDCOLUMN字段区分具有相同主键值的记录。

由于这是一个主要用于确保顺利复制的功能,因此应避免将此列用作主键。您的主键应该是一个逻辑上的业务实体,由您控制并且不会影响所选数据库引擎特定功能的操作特性。

+0

绝妙的解释! – 2016-06-08 00:15:38

+0

非常感谢。很高兴它是有意义的:) – 2016-06-08 20:41:05

+0

Rich(和@Jeffrey):如何将列标记为'ROWGUIDCOL' _ensure_“复制引擎可以使用ROWGUIDCOLUMN字段来区分具有相同主键值的记录”如果它不能保证独特性?是的,默认情况下,该值几乎总是唯一的,但是除了添加唯一索引/约束之外,没有任何操作可以防止手动添加重复值。 – 2016-06-11 02:13:19

0

不,它不强制它作为PK。这意味着你不能创建第二个uniqueidentifier并将其指定为行GUID列