使用SQL Server,我只想要非空值的唯一索引

时间:2011-01-13 06:18:41

标签: sql-server

  

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

在Sql Server中,我希望有一个包含空值和实际值的列。如果列有值,我想确保它是唯一的。该列可以有多行,该列为null。

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

Book Number - identity
Title - varchar
ISBN - char

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

有没有办法(或者最好的方法)对ISBN施加这种约束?

1 个答案:

答案 0 :(得分:5)

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

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

在早期版本中,创建一个计算列,该列是存在时的ISBN,以及ISBN为空时的主键:

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复制,因此处于wiki模式:)