Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

batasan unik bersyarat

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. OPSI (REKOMPILASI) Selalu Lebih Cepat; Mengapa?

  2. Cara Mengaktifkan SQL Server Agent XPs menggunakan T-SQL

  3. Cara Menggunakan Perancang Kueri di SQL Server

  4. Permintaan SQL untuk menemukan gaji tertinggi ke-N dari tabel gaji

  5. Cara Mengubah Skema Objek (Tabel, Tampilan, Prosedur Tersimpan) di Database SQL Server - Tutorial SQL Server / TSQL Bagian 28