J'ai une situation où je dois imposer une contrainte unique sur un ensemble de colonnes, mais seulement pour une valeur d'une colonne. Ainsi, par exemple, j'ai une table comme Table (ID, Name, RecordStatus)contrainte unique conditionnelle
RecordStatus ne peut avoir qu'une valeur 1 ou 2 (active ou supprimée), et je veux créer une contrainte unique sur (ID, RecordStatus) seulement lorsque RecordStatus = 1, car je me fiche de savoir s'il y a plusieurs suppressions enregistrements avec le même ID. En dehors de l'écriture des déclencheurs, est-ce que je peux le faire?
J'utilise SQL Server 2005.
Cette conception est une douleur commune. Avez-vous envisagé de modifier la conception de sorte que les enregistrements «supprimés» théoriquement soient physiquement supprimés de la table et éventuellement déplacés vers une table «archive»? – onedaywhen
... car l'impossibilité d'écrire une contrainte UNIQUE pour appliquer une simple clé devrait être considérée comme une «odeur de code», IMO. Si vous ne pouvez pas changer le design (SQL DDL) parce que de nombreuses autres tables référencent cette table, je parierais que votre SQL DML souffre également de cela, vous devez vous souvenir d'ajouter ... ET Table.RecordStatus = 1 ' à la plupart des conditions de recherche et de rejoindre les conditions impliquant cette table et subissant des bugs subtils quand il est inévitablement omis à l'occasion. – onedaywhen