SQL Server 2008: vérifiez les contraintes qui garantissent qu'une seule valeur dans toutes les lignes est définie sur 1 et d'autres sur 0

Il est nécessaire de créer une contrainte sur la colonne qui garantit qu'une seule valeur dans toutes les lignes est 1 et que toutes les autres sont égales à 0.

La solution avec des triggersurs existe mais j'aimerais que quelque chose soit embedded.

Est-ce qu'une telle chose est possible du tout?

modifier

En fait, je viens de remarquer que vous êtes sur SQL Server 2008, vous pouvez utiliser un index filtré pour cette

CREATE UNIQUE NONCLUSTERED INDEX UIX ON YourTable (col) where col = 1 

Réponse originale

Le plus simple serait probablement de stocker ce pk spécial dans une table à une ligne séparée. L'aspect pas plus d'une ligne peut être appliqué avec des contraintes de vérification.

 CREATE TABLE OneRowTable ( lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY CHECK (lock = 'X'), OtherTablePK int ); 

Sinon, en supposant que vous ayez un champ id composé d'entiers positifs, vous pouvez append une colonne calculée avec la définition suivante

 case when col=1 then -1 else id end 

et ajoutez une contrainte unique à cela.