Maison >base de données >tutoriel mysql >Comment appliquer une contrainte unique sur plusieurs colonnes dans SQL Server ?

Comment appliquer une contrainte unique sur plusieurs colonnes dans SQL Server ?

DDD
DDDoriginal
2025-01-24 23:51:11398parcourir

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

Application de l'unicité sur plusieurs colonnes SQL Server

Souvent, l'intégrité de la base de données nécessite d'empêcher les lignes en double basées sur plusieurs valeurs de colonnes. Cet article montre comment appliquer une contrainte unique sur les colonnes PersonNumber et Active d'une table Person.

Implémentation de la contrainte unique

Après avoir supprimé toutes les entrées en double préexistantes, appliquez la contrainte en utilisant l'une de ces méthodes :

  • ALTER TABLE Déclaration : Ceci ajoute directement la contrainte à la table existante.

    <code class="language-sql">ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person_NumberActive UNIQUE (PersonNumber, Active);</code>
  • CREATE UNIQUE INDEX Déclaration : Cela crée un index unique, qui applique implicitement la contrainte d'unicité.

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

Approches alternatives et optimisation

Bien que les méthodes ci-dessus soient efficaces, considérez ces améliorations :

  • Performances : Les vérifications proactives des doublons avant de tenter une insertion peuvent améliorer les performances en évitant les exceptions dans les TRY...CATCH blocs.
  • INSTEAD OF Déclencheur : Un déclencheur INSTEAD OF permet une logique d'insertion conditionnelle, empêchant les exceptions de se propager à la couche d'application. Cela offre un mécanisme de gestion des erreurs plus robuste.

Exemple illustratif

Cet exemple démontre la contrainte unique en action :

<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>

Cela garantit qu'un seul enregistrement existe pour chaque combinaison unique de statut PersonNumber et Active. Toute tentative d'insertion d'un doublon entraînera une erreur. N'oubliez pas de remplacer dbo.Person par votre schéma et votre nom de table réels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn