Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Contrainte pour un seul enregistrement marqué par défaut

Utiliser un index filtré unique

Sur SQL Server 2008 ou supérieur, vous pouvez simplement utiliser un index filtré unique

CREATE UNIQUE INDEX IX_TableName_FormID_isDefault
    ON TableName(FormID)
    WHERE isDefault = 1

Où se trouve la table

CREATE TABLE TableName(
    FormID INT NOT NULL,
    isDefault BIT NOT NULL
)

Par exemple, si vous essayez d'insérer plusieurs lignes avec le même FormID et isDefault défini sur 1, vous aurez cette erreur :

Impossible d'insérer une ligne de clé en double dans l'objet 'dbo.TableName' avec l'index unique 'IX_TableName_FormID_isDefault'. La valeur de la clé en double est (1).

Source :http://technet.microsoft.com/en-us/library/cc280372.aspx