2009-02-25 7 views
0

Il existe une colonne nvarchar dans une table qui autorise des valeurs vides. Une fois qu'il n'y a pas de valeur vide, il doit être uniqe.Contrainte - unique ou vide

Est-il possible de définir cette règle sans déclencheur?

EDIT:

http://decipherinfosys.wordpress.com/2007/11/30/multiple-null-values-in-a-unique-index-in-sql-serverdb2-luw/

est une solution agréable. Le seul problème que je vois est que la clé primaire peut à un moment donné être la même que l'une des valeurs de la colonne que je veux être unique. C'est pourquoi j'ai ajouté une chaîne fixe que je sais ne se produit jamais dans la colonne contrainte.

Répondre

1

Il y a un travail autour pour les multiples valeurs NULL dans une colonne de clé unique dans http://decipherinfosys.wordpress.com/2007/11/30/multiple-null-values-in-a-unique-index-in-sql-serverdb2-luw/

En gros, dans l'article, ils font une colonne supplémentaire qu'ils gardent unique. Si votre colonne d'origine est et non null, son contenu est copié dans la colonne unique. Chaque fois qu'elle est nulle, la clé primaire est copiée dans la colonne. C'est un peu une solution de contournement, mais cela devrait fonctionner.

1

Une solution qui n'est pas mentionnée dans le lien tehvan publié est une vue indexée. (Créez une vue en excluant les lignes avec des valeurs de colonne null et ajoutez un index unique sur la vue).

Cette approche peut être préférable si vous ne souhaitez pas ajouter de colonnes supplémentaires à la table de base. Les deux approches nécessitent que vous ayez les bons paramètres ANSI activés.

Questions connexes