【问题标题】:SQL Server Unique Combination check constraint [duplicate]SQL Server唯一组合检查约束[重复]
【发布时间】:2012-12-15 18:33:15
【问题描述】:

可能重复:
Unique Constraint, excluding NULL values

假设我有一张带有地址的表,我希望所有者只有一个主要地址。 我先定义索引/键还是检查约束? 这是什么表达方式?

TABLE_Address
--OwnerId
--IsMain    (not null able)
--City etc....

所以我需要一个独特的 (IsMain ==true AND ownerId) 组合

【问题讨论】:

  • 请说明 SQL Server 的版本,因为答案各不相同。如果 2008+ 可以使用过滤索引,如果 2000/2005 可以使用索引视图。
  • 这是 SQL Server 2012。过滤索引是否要求除唯一值之外的所有其他值都为 Null?
  • 对不起,我以为我选择了一个副本,其中包含两个示例语法。对于过滤索引,您只需要 CREATE UNIQUE INDEX ix ON TABLE_Address(ownerId) WHERE IsMain=1
  • 该语句还将 IsMain=false 值限制为唯一值,所以我不能有多个非主地址......这应该只适用于 Null 值吗?
  • 不,它并不限制 IsMain=false 是唯一的,因为它们根本不包含在过滤索引中。它们被WHERE 子句排除在外。 SQL Server 没有布尔数据类型和false。您实际使用的是什么数据类型?我假设bit 因此10

标签: sql sql-server unique-constraint check-constraints


【解决方案1】:

ownerId 上创建过滤的唯一索引,条件为IsMain = 1。该索引将 a) 强制执行此条件并 b) 帮助您的应用程序进行预插入验证查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    相关资源
    最近更新 更多