2016-05-13 102 views
1

我想知道什麼纔會有一個唯一的條件約束的正確方法是? 因此,如果用戶沒有在AccountIdentifier字段中輸入任何內容並提交,它將在數據庫中顯示爲Null,但由於唯一約束,它不能有多個空值,是否有辦法執行此操作?獨特的約束條件接受多個NULL在一個唯一的列

CREATE TABLE [dbo].[AccountTemplate] 
(
    [AccountID] INT NOT NULL, 
    [AccountIdentifier] NCHAR(50) NULL, 
    CONSTRAINT [FK_AccountTemplate_Identifier] UNIQUE NONCLUSTERED ([AccountIdentifier] ASC, [AccountID] ASC) 
) 
+0

請不要使用不適用於您的問題的標籤 –

+0

JamesZ答案是正確的,只要有小塊捕獲即可。下面的sqlmag文章描述了這種方法很好: http://sqlmag.com/blog/whats-good-use-unique-filtered-index –

回答

2

將您的索引創建爲過濾。如果您從索引中刪除空值,則唯一性也不會被強制執行。

1

NULL不是價值,而是缺乏價值。您可以根據需要在唯一列中添加儘可能多的NULL。例如,看到這個sqlfiddle example與你的表。