Heim > Datenbank > MySQL-Tutorial > Wie kann ich bedingte Eindeutigkeit in SQL Server erzwingen?

Wie kann ich bedingte Eindeutigkeit in SQL Server erzwingen?

Patricia Arquette
Freigeben: 2025-01-10 08:17:40
Original
508 Leute haben es durchsucht

How Can I Enforce Conditional Uniqueness in SQL Server?

Implementierung bedingter eindeutiger Einschränkungen in SQL Server

Die eindeutigen Einschränkungen von SQL Server verhindern doppelte Einträge in bestimmten Spalten. Aber wie erzwingt man Einzigartigkeit nur unter bestimmten Bedingungen? Die Lösung liegt in der Verwendung gefilterter Indizes.

Laut der SQL Server-Dokumentation ist ein gefilterter Index ein nicht gruppierter Index, der nur eine Teilmenge von Tabellenzeilen indiziert, die durch ein Filterprädikat definiert werden.

Mit dieser Funktion können Sie einen eindeutigen Index mit einem bedingten Filter kombinieren, um die Eindeutigkeit selektiv durchzusetzen. Betrachten Sie eine Tabelle:

Table(ID, Name, RecordStatus)
Nach dem Login kopieren

Wobei RecordStatus 1 (aktiv) oder 2 (gelöscht) sein kann. Um eindeutige ID-Werte nur dann sicherzustellen, wenn RecordStatus 1 ist, erstellen Sie einen gefilterten Index:

CREATE UNIQUE INDEX MyIndex
ON MyTable(ID)
WHERE RecordStatus = 1;
Nach dem Login kopieren

Dies erzwingt die Eindeutigkeit von ID nur für aktive Datensätze (wobei RecordStatus = 1). Der Versuch, ein Duplikat ID mit RecordStatus = 1 einzufügen, führt zu einem Fehler:

<code>Cannot insert duplicate key row in object 'MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).</code>
Nach dem Login kopieren

Es ist wichtig, sich daran zu erinnern, dass gefilterte Indizes in SQL Server 2008 eingeführt wurden. Für frühere Versionen (wie SQL Server 2005) sind alternative Ansätze wie Trigger erforderlich, um bedingte Eindeutigkeit zu erreichen.

Das obige ist der detaillierte Inhalt vonWie kann ich bedingte Eindeutigkeit in SQL Server erzwingen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage