Je l'ai eu à quelques reprises dans ma carrière, et aucun de mes pairs locaux ne semble être en mesure d'y répondre. Dites que j'ai une table qui a un champ "Description" qui est une clé candidate, sauf que parfois un utilisateur s'arrêtera à mi-chemin du processus. Donc, pour peut-être 25% des enregistrements, cette valeur est nulle, mais pour tout ce qui n'est pas NULL, elle doit être unique.SQL puis-je avoir une contrainte "conditionnellement unique" sur une table?
Un autre exemple pourrait être une table qui doit conserver plusieurs "versions" d'un enregistrement, et une valeur de bit indique laquelle est la "active". Ainsi, la "clé candidate" est toujours remplie, mais il peut y avoir trois versions identiques (avec 0 dans le bit actif) et une seule active (1 dans le bit actif). J'ai d'autres méthodes pour résoudre ces problèmes (dans le premier cas, appliquer le code de la règle, soit dans la procédure stockée ou la couche de gestion, et dans la seconde, remplir une table d'archive avec un déclencheur et UNION les tables lorsque je besoin d'une histoire). Je ne veux pas d'alternatives (à moins qu'il n'y ait des solutions manifestement meilleures), je me demande simplement si toute saveur de SQL peut exprimer de la sorte un «unicité conditionnel». J'utilise MS SQL, donc s'il y a un moyen de le faire, super. Je suis surtout intéressé par le problème.
double possible: http://stackoverflow.com/questions/866061/conditional-unique-constraint –
Quelle version de SQL Server? – gbn
Merci pour le pointeur In silico. Cela s'applique certainement à la situation 2. J'ai fait une recherche avant de poster, mais je n'ai pas fait de recherche sur les mots-clés que j'ai éventuellement utilisés dans le titre ou je l'aurais trouvé! Le lien que vous postez n'aborde pas tout à fait la situation # 1, qui est résolue avec la suggestion de Tom H. en 2005 et Arthur en 2008. gbn: J'utilise 2005, c'est pourquoi je ne connaissais pas l'index filtres en 2008. –