Maison > base de données > tutoriel mysql > Comment appliquer des contraintes uniques sur les colonnes nullables dans SQL Server ?

Comment appliquer des contraintes uniques sur les colonnes nullables dans SQL Server ?

Linda Hamilton
Libérer: 2025-01-04 00:05:39
original
949 Les gens l'ont consulté

How to Enforce Unique Constraints on Nullable Columns in SQL Server?

Contraintes uniques non NULL sur les colonnes NULLables

Il est souvent souhaitable d'imposer l'unicité sur une colonne tout en autorisant les valeurs nulles. Cependant, créer un index unique sur une colonne NULLable dans SQL Server 2005 peut s'avérer difficile.

Solutions actuelles

Une solution de contournement courante consiste à créer un index unique sur une colonne matérialisée. vue qui exclut les valeurs nulles :

CREATE VIEW vw_unq WITH SCHEMABINDING AS
    SELECT Column1
      FROM MyTable
     WHERE Column1 IS NOT NULL

CREATE UNIQUE CLUSTERED INDEX unq_idx ON vw_unq (Column1)
Copier après la connexion

Mieux Alternatives

SQL Server 2008 a introduit les index filtrés, qui offrent une meilleure solution :

CREATE UNIQUE INDEX AK_MyTable_Column1 ON MyTable (Column1) WHERE Column1 IS NOT NULL
Copier après la connexion

Cet index autorise les valeurs nulles tout en appliquant l'unicité aux valeurs non nulles.

Option supplémentaire : déclencheurs

Une autre alternative consiste à créer un déclencheur pour vérifier l'unicité lors des opérations d'insertion et de mise à jour :

CREATE TRIGGER trg_MyTable_CheckUnique ON MyTable AFTER INSERT, UPDATE
AS
BEGIN
    IF EXISTS(SELECT * FROM MyTable WHERE Column1 = NEW.Column1 AND Column1 IS NOT NULL)
    BEGIN
        RAISERROR('Duplicate value for Column1.', 16, 1)
    END
END
Copier après la connexion

Cependant, les déclencheurs peuvent avoir un impact sur les performances, en particulier sur les systèmes à haute concurrence.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal