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

Bedingte Eindeutigkeit

Siehe, der gefilterte Index. Aus der Dokumentation (Hervorhebung von mir):

Ein gefilterter Index ist ein optimierter, nicht geclusterter Index, der sich besonders zur Abdeckung von Abfragen eignet, die aus einer wohldefinierten Teilmenge von Daten auswählen. Es verwendet ein Filterprädikat, um einen Teil der Zeilen in der Tabelle zu indizieren. Ein gut gestalteter gefilterter Index kann die Abfrageleistung verbessern sowie die Wartungs- und Speicherkosten für den Index im Vergleich zu vollständigen Tabellenindizes reduzieren.

Und hier ist ein Beispiel, das einen eindeutigen Index mit einem Filterprädikat kombiniert:

create unique index MyIndex
on MyTable(ID)
where RecordStatus = 1;

Dies erzwingt im Wesentlichen die Eindeutigkeit von ID wenn RecordStatus ist 1 .

Nach der Erstellung dieses Indexes löst eine Verletzung der Eindeutigkeit einen Fehler aus:

Msg 2601, Level 14, State 1, Line 13
Kann keine doppelte Schlüsselzeile in Objekt „dbo.MyTable“ mit eindeutigem Index „MyIndex“ einfügen. Der doppelte Schlüsselwert ist (9999).

Hinweis:Der gefilterte Index wurde in SQL Server 2008 eingeführt. Informationen zu früheren Versionen von SQL Server finden Sie in dieser Antwort.