Maison >base de données >tutoriel mysql >Comment puis-je appliquer l'unicité conditionnelle dans SQL Server ?

Comment puis-je appliquer l'unicité conditionnelle dans SQL Server ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-10 08:17:40471parcourir

How Can I Enforce Conditional Uniqueness in SQL Server?

Implémentation de contraintes conditionnelles uniques dans SQL Server

Les contraintes uniques de SQL Server empêchent les entrées en double dans les colonnes spécifiées. Mais comment appliquer l’unicité uniquement dans des conditions spécifiques ? La solution réside dans l'utilisation d'index filtrés.

Selon la documentation SQL Server, un index filtré est un index non clusterisé qui indexe uniquement un sous-ensemble de lignes de table, défini par un prédicat de filtre.

Cette fonctionnalité vous permet de combiner un index unique avec un filtre conditionnel pour appliquer l'unicité de manière sélective. Considérez un tableau :

<code class="language-sql">Table(ID, Name, RecordStatus)</code>

RecordStatus peut être 1 (actif) ou 2 (supprimé). Pour garantir des valeurs ID uniques uniquement lorsque RecordStatus vaut 1, vous devez créer un index filtré :

<code class="language-sql">CREATE UNIQUE INDEX MyIndex
ON MyTable(ID)
WHERE RecordStatus = 1;</code>

Cela applique l'unicité sur ID uniquement pour les enregistrements actifs (où RecordStatus = 1). Tenter d'insérer un doublon ID avec RecordStatus = 1 entraînera une erreur :

<code>Cannot insert duplicate key row in object 'MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).</code>

Il est important de se rappeler que les index filtrés ont été introduits dans SQL Server 2008. Pour les versions antérieures (comme SQL Server 2005), des approches alternatives telles que les déclencheurs sont nécessaires pour obtenir l'unicité conditionnelle.

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