Sql-Server

兩列上的 SQL Server 唯一約束,但有異常

  • August 11, 2020

大家好,感謝您的建議。

費用(SupplierID(外鍵),DocumentID(vchar))

我了解如何在兩列上添加簡單的唯一約束。但是,如果 DocumentID = ‘NA’,我想忽略約束的規則。

例如,我們系統中的某些供應商不提供發票 ID。因此,我將欄位保留為 NULL。我想刪除欄位“DocumentID”的所有空值,以避免在我的客戶端程式碼中考慮空值。

我是 SQL Server 的新手,但我可以弄清楚如何使用觸發器來做到這一點。我在這裡問的原因是看看是否有更好的方法來應對這種情況或通過不同的設計來避免這種情況。

謝謝!

謝謝蒂博爾。我想我無法正確輸入評論。這就是我最終使用您的方法的結果。

use CMRBE  
CREATE UNIQUE NONCLUSTERED INDEX idx_SupplierID_DocumentID  
ON Expense(SupplierID, DocumentID)  
WHERE DocumentID <> 'NA';

您可以使用 where 子句創建唯一索引,以過濾掉您希望避免重複的那些值。

謝謝蒂博爾。這就是我最終得到的,它符合要求。

use CMRBE  
CREATE UNIQUE NONCLUSTERED INDEX idx_SupplierID_DocumentID  
ON Expense(SupplierID, DocumentID)  
WHERE DocumentID <> 'NA';

引用自:https://dba.stackexchange.com/questions/273439