Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Vincolo per un solo record contrassegnato come predefinito

Utilizza un indice filtrato univoco

In SQL Server 2008 o versioni successive puoi semplicemente utilizzare un indice filtrato univoco

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

Dov'è il tavolo

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

Ad esempio, se provi a inserire più righe con lo stesso FormID e isDefault impostato su 1 avrai questo errore:

Impossibile inserire una riga di chiave duplicata nell'oggetto 'dbo.TableName' con uniqueindex 'IX_TableName_FormID_isDefault'. Il valore della chiave duplicata è (1).

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