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>
Où 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!