Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menguatkuasakan Kekangan Unik Bersyarat dalam Pelayan SQL Tanpa Menggunakan Pencetus?

Bagaimanakah Saya Boleh Menguatkuasakan Kekangan Unik Bersyarat dalam Pelayan SQL Tanpa Menggunakan Pencetus?

DDD
DDDasal
2025-01-10 06:40:44466semak imbas

How Can I Enforce Conditional Unique Constraints in SQL Server Without Using Triggers?

Mencapai Kekangan Unik Bersyarat dalam Pelayan SQL: Pendekatan Tanpa Pencetus

Mengekalkan integriti data selalunya memerlukan kekangan unik yang digunakan secara terpilih pada subset data. Walaupun pencetus adalah penyelesaian biasa, SQL Server menyediakan kaedah yang lebih elegan menggunakan indeks yang ditapis.

Memanfaatkan Indeks Ditapis untuk Keunikan Bersyarat

Indeks yang ditapis mengindeks hanya sebahagian daripada baris jadual, ditentukan oleh keadaan penapis. Ini membenarkan kekangan unik bersyarat.

Pertimbangkan senario yang memerlukan keunikan untuk (ID, RecordStatus) hanya apabila RecordStatus ialah 1. Penyelesaiannya adalah mudah:

<code class="language-sql">CREATE UNIQUE INDEX MyIndex
ON MyTable(ID)
WHERE RecordStatus = 1;</code>

Indeks ini hanya mengindeks baris di mana RecordStatus = 1, sekali gus menguatkuasakan keunikan untuk subset ini. Melanggar kekangan ini mengakibatkan ralat:

<code>Msg 2601, Level 14, State 1, Line 13
Cannot insert duplicate key row in object 'dbo.MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).</code>

Pertimbangan Penting

Indeks yang ditapis telah diperkenalkan dalam SQL Server 2008. Untuk versi terdahulu, pencetus atau gabungan kekangan unik dan teknik versi baris adalah alternatif yang diperlukan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguatkuasakan Kekangan Unik Bersyarat dalam Pelayan SQL Tanpa Menggunakan Pencetus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn