Maison >base de données >tutoriel mysql >Comment puis-je appliquer des contraintes conditionnelles uniques dans SQL Server sans utiliser de déclencheurs ?

Comment puis-je appliquer des contraintes conditionnelles uniques dans SQL Server sans utiliser de déclencheurs ?

DDD
DDDoriginal
2025-01-10 06:40:44464parcourir

How Can I Enforce Conditional Unique Constraints in SQL Server Without Using Triggers?

Obtenir des contraintes conditionnelles uniques dans SQL Server : une approche sans déclencheur

Le maintien de l'intégrité des données nécessite souvent des contraintes uniques appliquées de manière sélective à des sous-ensembles de données. Bien que les déclencheurs soient une solution courante, SQL Server propose une méthode plus élégante utilisant des index filtrés.

Exploiter les index filtrés pour l'unicité conditionnelle

Un index filtré n'indexe qu'une partie des lignes d'une table, déterminée par une condition de filtre. Cela permet des contraintes uniques conditionnelles.

Considérez un scénario exigeant l'unicité pour (ID, RecordStatus) uniquement lorsque RecordStatus vaut 1. La solution est simple :

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

Cet index indexe uniquement les lignes où RecordStatus = 1, renforçant ainsi l'unicité de ce sous-ensemble. La violation de cette contrainte entraîne une erreur :

<code>Msg 2601, Level 14, State 1, Line 13
Cannot insert duplicate key row in object 'dbo.MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).</code>

Considération importante

Les index filtrés ont été introduits dans SQL Server 2008. Pour les versions antérieures, les déclencheurs ou une combinaison de contraintes uniques et de techniques de gestion des versions de lignes sont des alternatives nécessaires.

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