表中有一個允許空值的nvarchar列。一旦有非空值,它必須是唯一的。Contraint - 唯一或空
是否可以在沒有觸發器的情況下定義此規則?
編輯:
是一個很好的解決方法。我看到的唯一問題是主鍵可能在某些時候與我希望是唯一的列中的某個值相同。這就是爲什麼我添加一個固定的字符串,我知道從來沒有出現在約束列中。
表中有一個允許空值的nvarchar列。一旦有非空值,它必須是唯一的。Contraint - 唯一或空
是否可以在沒有觸發器的情況下定義此規則?
編輯:
是一個很好的解決方法。我看到的唯一問題是主鍵可能在某些時候與我希望是唯一的列中的某個值相同。這就是爲什麼我添加一個固定的字符串,我知道從來沒有出現在約束列中。
有一個變通的唯一鍵中的列多NULL值http://decipherinfosys.wordpress.com/2007/11/30/multiple-null-values-in-a-unique-index-in-sql-serverdb2-luw/
基本上在文章中他們讓他們保持唯一一個額外的列。如果您的原始列是而不是爲空,則其內容將被複制到唯一列中。只要它爲空,主鍵就被複制到列中。這是一個解決方法,但它應該工作。
在tehvan發佈的鏈接中沒有提到的一個解決方案是索引視圖。 (創建一個視圖,排除具有空列值的行並在視圖上添加唯一索引)。
如果您不想將其他列添加到基表中,則可能首選此方法。兩種方法都需要您啓用正確的ANSI設置。