Sql-Server
部分唯一檢查約束
我有一個正在遷移到 SQL Server 的舊 Access 表,其中有一個名為“LinkedID”的欄位。該欄位在大約 5 年前大部分未使用,因此對於許多歷史記錄,它要麼為空,要麼預設為“00000000”。但是,展望未來,我們希望將其設置為不允許重複值(假設 1,000 條記錄為空,500 條為“00000000”,大約 10,000 條是我們想要的實際唯一值)。
調查一下,由於我有多個設置為“00000000”的記錄和多個為空的記錄,我知道我不能使用唯一約束。有沒有一種方法可以創建一個檢查約束來檢查插入/更新的值是否是唯一的(如果不是全 0 或空值)?或者如果它不能通過檢查約束來工作,我的另一個想法可能是使用插入/更新觸發器以某種方式驗證數據?
您可以為此使用過濾的唯一索引:
CREATE UNIQUE INDEX LinkedID_Unique_except_Zeroes_or_Null ON dbo.oldAccessTable (LinkedID) WHERE LinkedID <> '00000000' ;
條件 (
LinkedID <> '00000000'
) 滿足這兩個要求,即忽略或不儲存在索引中的行'00000000'
,NULL
因此不檢查它們的唯一性。