Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

contrainte unique conditionnelle

Voici l'index filtré. De la documentation (c'est moi qui souligne):

Un index filtré est un index non cluster optimisé particulièrement adapté pour couvrir les requêtes qui sélectionnent à partir d'un sous-ensemble de données bien défini. Il utilise un prédicat de filtre pour indexer une partie des lignes de la table. Un index filtré bien conçu peut améliorer les performances des requêtes et réduire les coûts de maintenance et de stockage de l'index par rapport aux index de table complète.

Et voici un exemple combinant un index unique avec un prédicat de filtre :

create unique index MyIndex
on MyTable(ID)
where RecordStatus = 1;

Cela renforce essentiellement l'unicité de ID quand RecordStatus est 1 .

Suite à la création de cet index, une violation d'unicité lèvera un arror :

Msg 2601, Niveau 14, État 1, Ligne 13
Impossible d'insérer une ligne de clé en double dans l'objet 'dbo.MyTable' avec l'index unique 'MyIndex'. La valeur de clé en double est (9999).

Remarque :l'index filtré a été introduit dans SQL Server 2008. Pour les versions antérieures de SQL Server, veuillez consulter cette réponse.