2011-06-18 146 views
2

在MS SQL Server 2008中,是否有可能在列BUT上定义UNIQUE CONSTRAINT,该列是对IF进行检查的,并且对于非空值来说是ONLY。也就是说,会有很多NULL应该被忽略。但对于非空值,它应该是唯一的。唯一约束在NON-NULL列上的唯一约束

+0

[重复的空值SQL Server的唯一约束]的可能重复(http://stackoverflow.com/questions/1796414/sql-server-unique-constraint-with-duplicate-nulls)(和许多其他人) –

回答

5

你需要创建一个筛选索引

CREATE UNIQUE NONCLUSTERED INDEX User_PinNr_IUC 
ON [User] (pinNr) 
WHERE pinNr IS NOT NULL 

指的CREATE INDEX (Transact-SQL)

WHERE < filter_predicate>:
通过指定 创建一个过滤索引哪些行包括在索引中。 过滤后的索引必须是表格上的非聚簇索引 。为已过滤的索引中的数据行 创建 已过滤的统计信息。

+0

谢谢! CREATE INDEX和ADD CONSTRAINT有什么区别吗?请问,如何为varchar NULL或EMPTY/WHITESPACE写入条件? – Cartesius00

+0

@James:CREATE INDEX是一个独立的声明。在CREATE/ALTER TABLE语句中使用ADD CONSTRAINT。 –

+0

@James:VARCHARColumn为null或VARCHARColumn =“” –