在Sql Server中,我希望有一个包含空值和实际值的列。如果列有值,我想确保它是唯一的。该列可以有多行,该列为null。
例如,假设我有一个包含3列的书籍表,即:
Book Number - identity
Title - varchar
ISBN - char
现在该表将有一个带有标识列的主键,这很好。问题出在ISBN栏目上。我不希望任何ISBN编号多次出现在表格中,但会有很多书没有ISBN编号(因为我不知道)。
有没有办法(或者最好的方法)对ISBN施加这种约束?
答案 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模式:)