2011-06-18 145 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 =「」 –