【问题标题】:With SQL Server I want a unique index on only the non-null values [duplicate]使用 SQL Server,我想要一个仅针对非空值的唯一索引 [重复]
【发布时间】:2011-06-08 07:43:00
【问题描述】:

可能重复:
SQL Server UNIQUE constraint with duplicate NULLs

在 Sql Server 中,我想要一个既有空值又有实值的列。如果该列有一个值,我想确保它是唯一的。该列可以有多行,该列为 null。

例如,假设我有一个包含 3 列的书表,即:

Book Number - identity
Title - varchar
ISBN - char

现在该表将有一个带有标识列的主键,这很好。问题将在 ISBN 列上。我不希望任何 ISBN 号码在表格中出现多次,但是会有很多书没有 ISBN 号码(因为我不知道)。

是否有任何方法(或最好的方法)对 ISBN 实施此限制?

【问题讨论】:

  • 不行。也许您可以使用 CHECK?
  • @astander: 它本身就是 stackoverflow.com/questions/191421/… 的复制品,它复制了许多其他东西。让我们回答这个问题? :)
  • @Andomar,这违背了 close->Duplicate question 的目的
  • @astander:也许 0.001% 的重复项实际上是作为重复项关闭的。而一些被关闭的并不是真正的重复。
  • 我同意,这是之前在引用的问题中回答的,对不起。

标签: sql-server


【解决方案1】:

在 SQL Server 2008 中,您可以创建过滤索引,例如:

CREATE UNIQUE INDEX indexName ON tableName(isbn) WHERE isbn IS NOT NULL

在早期版本中,创建一个计算列,ISBN存在时为ISBN,ISBN为null时为主键:

CREATE TABLE tableName (
    pk int identity(1,1) primary key,
    isbn int NULL,
    nullbuster as (case when isbn is null then pk else 0 end),
    CONSTRAINT dupNulls_uqX UNIQUE (isbn)
)

SQL Server UNIQUE constraint with duplicate NULLs复制,所以这是维基模式:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多