menguatkuasakan keunikan merentasi pelbagai lajur SQL Server
Selalunya, integriti pangkalan data memerlukan mencegah baris pendua berdasarkan nilai lajur berganda. Artikel ini menunjukkan cara menguatkuasakan kekangan yang unik di seluruh lajur dan PersonNumber
dalam jadual Active
. Person
Melaksanakan kekangan unik
Setelah mengeluarkan sebarang penyertaan pendua yang sedia ada, gunakan kekangan menggunakan salah satu kaedah ini:
: ALTER TABLE
Ini secara langsung menambah kekangan ke jadual yang sedia ada.
<code class="language-sql">ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person_NumberActive UNIQUE (PersonNumber, Active);</code>
: CREATE UNIQUE INDEX
Ini mewujudkan indeks unik, yang secara tersirat menguatkuasakan kekangan keunikan.
<code class="language-sql">CREATE UNIQUE INDEX uq_Person_NumberActive ON dbo.Person (PersonNumber, Active);</code>
Pendekatan & Pengoptimuman Alternatif
Walaupun kaedah di atas adalah berkesan, pertimbangkan peningkatan ini:
TRY...CATCH
INSTEAD OF
membolehkan logik memasukkan bersyarat, mencegah pengecualian daripada menyebarkan ke lapisan aplikasi. Ini menawarkan mekanisme pengendalian kesilapan yang lebih mantap.
INSTEAD OF
Contoh ini menunjukkan kekangan yang unik dalam tindakan:
Ini memastikan bahawa hanya satu rekod yang wujud untuk setiap kombinasi unik
<code class="language-sql">-- Create the Person table CREATE TABLE dbo.Person ( ID INT IDENTITY(1, 1) PRIMARY KEY, Name NVARCHAR(32) NOT NULL, Active BIT NOT NULL DEFAULT 0, PersonNumber INT NOT NULL ); -- Add the unique constraint ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person_NumberActive UNIQUE (PersonNumber, Active); -- Insert data INSERT INTO dbo.Person (Name, Active, PersonNumber) VALUES ('John Doe', 1, 1234); INSERT INTO dbo.Person (Name, Active, PersonNumber) VALUES ('Jane Doe', 0, 5678); -- Attempt to insert a duplicate (this will fail) INSERT INTO dbo.Person (Name, Active, PersonNumber) VALUES ('John Doe', 1, 1234);</code>
status. Sebarang percubaan untuk memasukkan pendua akan mengakibatkan ralat. Ingatlah untuk menggantikan PersonNumber
dengan skema sebenar dan nama jadual anda. Active
Atas ialah kandungan terperinci Bagaimana untuk Menguatkuasakan Kekangan Unik Merentasi Berbilang Lajur dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!