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
Libérer: 2025-01-24 23:51:11
original
389 Les gens l'ont consulté

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>
    Copier après la connexion
  • 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>
    Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal