Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Einschränkung für nur einen als Standard markierten Datensatz

Verwenden Sie einen eindeutigen gefilterten Index

Auf SQL Server 2008 oder höher können Sie einfach einen eindeutigen gefilterten Index verwenden

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

Wo der Tisch ist

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

Zum Beispiel, wenn Sie versuchen, viele Zeilen mit derselben FormID einzufügen und isDefault auf 1 gesetzt, erhalten Sie diesen Fehler:

Es kann keine doppelte Schlüsselzeile in das Objekt „dbo.TableName“ mit dem eindeutigen Index „IX_TableName_FormID_isDefault“ eingefügt werden. Der doppelte Schlüsselwert ist (1).

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