使用SQL Server,我希望只对非空值创建唯一索引。
在SQL Server中,有一个问题是如何在只有非空值的情况下创建唯一索引。这个问题的出现可能是由于在数据库中存在重复的NULL值,但是我们希望在索引中只有非空值是唯一的。
解决这个问题的方法是使用过滤索引或计算列。
在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,因此这是一个维基模式的问题。
通过使用上述方法,我们可以在SQL Server中创建一个只包含非空值的唯一索引,从而解决了重复NULL值的问题。