Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Restrição para apenas um registro marcado como padrão

Use um índice filtrado exclusivo


No SQL Server 2008 ou superior, você pode simplesmente usar um índice filtrado exclusivo
CREATE UNIQUE INDEX IX_TableName_FormID_isDefault
    ON TableName(FormID)
    WHERE isDefault = 1

Onde está a mesa
CREATE TABLE TableName(
    FormID INT NOT NULL,
    isDefault BIT NOT NULL
)

Por exemplo, se você tentar inserir muitas linhas com o mesmo FormID e isDefault definido como 1, você terá este erro:

Não é possível inserir uma linha de chave duplicada no objeto 'dbo.TableName' com uniqueindex 'IX_TableName_FormID_isDefault'. O valor da chave duplicada é (1).

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