J'ai une table, quelque chose commeUNIQUE contrôlée par une colonne de bits
FieldsOnForms(
FieldID int (FK_Fields)
FormID int (FK_Forms)
isDeleted bit
)
La paire (FieldID, FormID) doit être unique, mais seulement si la ligne n'est pas supprimé (isDeleted = 0).
Est-il possible de définir une telle contrainte dans SQLServer 2008? (sans utiliser de déclencheurs)
P.S. Définir (FieldID, FormID, isDeleted) comme unique ajoute la possibilité de marquer une ligne comme supprimée, mais j'aimerais avoir la possibilité de mettre n lignes (par FieldID, FormID) à isDeleted = 1, et d'en avoir seulement une avec isDeleted = 0
+1 meilleure réponse ... – gbn
Bien que je rencontre des erreurs, à cause du champ de bits (Convertir une colonne en type de données d'une constante n'est pas supporté pour les index filtrés), cela semble être le solution que je recherchais. – jaraics
@jaraics - Je viens de créer la table dans votre question, puis l'index dans ma réponse, et il est créé sans erreur. En outre, si vous rencontrez des discordances de type de données, il est généralement préférable de CAST (ou CONVERT) la constante du type de colonne, plutôt que l'inverse. Je ne sais pas si cela réglerait votre problème. –