Heim > Datenbank > MySQL-Tutorial > Wie kann ich eine eindeutige Einschränkung über mehrere Spalten im SQL -Server durchsetzen?

Wie kann ich eine eindeutige Einschränkung über mehrere Spalten im SQL -Server durchsetzen?

DDD
Freigeben: 2025-01-24 23:51:11
Original
389 Leute haben es durchsucht

How to Enforce a Unique Constraint Across Multiple Columns in SQL Server?

Eindeutigkeit über mehrere SQL Server-Spalten hinweg erzwingen

Häufig erfordert die Datenbankintegrität das Verhindern doppelter Zeilen basierend auf mehreren Spaltenwerten. In diesem Artikel wird gezeigt, wie Sie eine eindeutige Einschränkung für die Spalten PersonNumber und Active in einer Tabelle Person erzwingen.

Implementierung der Unique-Beschränkung

Nachdem Sie alle bereits vorhandenen doppelten Einträge entfernt haben, wenden Sie die Einschränkung mit einer dieser Methoden an:

  • ALTER TABLEAnweisung: Dadurch wird die Einschränkung direkt zur vorhandenen Tabelle hinzugefügt.

    <code class="language-sql">ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person_NumberActive UNIQUE (PersonNumber, Active);</code>
    Nach dem Login kopieren
  • CREATE UNIQUE INDEXAnweisung: Dadurch wird ein eindeutiger Index erstellt, der implizit die Eindeutigkeitsbeschränkung erzwingt.

    <code class="language-sql">CREATE UNIQUE INDEX uq_Person_NumberActive ON dbo.Person (PersonNumber, Active);</code>
    Nach dem Login kopieren

Alternative Ansätze & Optimierung

Während die oben genannten Methoden effektiv sind, sollten Sie die folgenden Verbesserungen in Betracht ziehen:

  • Leistung: Proaktive Duplikatprüfungen vor dem Versuch einer Einfügung können die Leistung verbessern, indem Ausnahmen innerhalb von TRY...CATCH Blöcken vermieden werden.
  • INSTEAD OFTrigger: Ein INSTEAD OF-Trigger ermöglicht eine bedingte Einfügelogik und verhindert, dass sich Ausnahmen auf die Anwendungsebene ausbreiten. Dies bietet einen robusteren Fehlerbehandlungsmechanismus.

Anschauliches Beispiel

Dieses Beispiel zeigt die einzigartige Einschränkung in Aktion:

<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>
Nach dem Login kopieren

Dadurch wird sichergestellt, dass für jede eindeutige Kombination aus PersonNumber und Active-Status nur ein Datensatz vorhanden ist. Jeder Versuch, ein Duplikat einzufügen, führt zu einem Fehler. Denken Sie daran, dbo.Person durch Ihr tatsächliches Schema und Ihren Tabellennamen zu ersetzen.

Das obige ist der detaillierte Inhalt vonWie kann ich eine eindeutige Einschränkung über mehrere Spalten im SQL -Server durchsetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage