Lihatlah, indeks yang disaring. Dari dokumentasi (penekanan milik saya):
Indeks yang difilter adalah indeks nonclustered yang dioptimalkan secara khusus cocok untuk mencakup kueri yang memilih dari subset data yang terdefinisi dengan baik. Ini menggunakan predikat filter untuk mengindeks sebagian baris dalam tabel. Indeks terfilter yang dirancang dengan baik dapat meningkatkan kinerja kueri serta mengurangi biaya pemeliharaan dan penyimpanan indeks dibandingkan dengan indeks tabel lengkap.
Dan berikut adalah contoh menggabungkan indeks unik dengan predikat filter:
create unique index MyIndex
on MyTable(ID)
where RecordStatus = 1;
Ini pada dasarnya memberlakukan keunikan ID
ketika RecordStatus
adalah 1
.
Setelah pembuatan indeks tersebut, pelanggaran keunikan akan menimbulkan kesalahan:
Msg 2601, Level 14, State 1, Line 13
Tidak dapat menyisipkan baris kunci duplikat di objek 'dbo.MyTable' dengan indeks unik 'MyIndex'. Nilai kunci duplikat adalah (9999).
Catatan:indeks yang difilter diperkenalkan di SQL Server 2008. Untuk versi SQL Server sebelumnya, silakan lihat jawaban ini.