【问题标题】:newsequentialid constraint on clustered PK集群 PK 上的 newsequentialid 约束
【发布时间】:2017-03-03 10:06:38
【问题描述】:

我的表具有 uniqueidentifier 类型的聚集主键并且它们不是顺序的,因此发生了很多物理排序。

我知道最好将复合主键与集群 int 和非集群唯一标识符组合使用,但数据库已经在生产中使用。

问题是如何更改对 PK 的约束以使用 NEWSEQUENTIALID() 作为默认值并且是集群主键。我假设我必须放弃并重新创建约束。我不是 dba,所以最好能提供带有语法的示例。

【问题讨论】:

  • 其实用一个int标识列作为主键会更好。没有理由包含 guid 列,因为它在定义上是唯一的。
  • 服务器端有理由将id用作guid,所以我宁愿不改变这个逻辑

标签: sql sql-server constraints


【解决方案1】:

我找到了我的问题的答案,我无法添加描述集群 PK 的约束以及该列的默认值。但我可以通过两个约束来做到这一点。

ALTER TABLE dbo.FooTable 
ADD CONSTRAINT [PK_FooTableId] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)

ALTER TABLE dbo.FooTable 
ADD CONSTRAINT [PK_FooTableId_Default] DEFAULT NEWSEQUENTIALID() for Id 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多