Maison >base de données >tutoriel mysql >Comment puis-je appliquer des contraintes conditionnelles uniques dans SQL Server sans utiliser de déclencheurs ?
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!