Erreichen bedingter eindeutiger Einschränkungen in SQL Server: Ein auslöserfreier Ansatz
Um die Datenintegrität aufrechtzuerhalten, sind häufig eindeutige Einschränkungen erforderlich, die selektiv auf Teilmengen von Daten angewendet werden. Während Trigger eine gängige Lösung sind, bietet SQL Server eine elegantere Methode mit gefilterten Indizes.
Nutzung gefilterter Indizes für bedingte Eindeutigkeit
Ein gefilterter Index indiziert nur einen Teil der Zeilen einer Tabelle, der durch eine Filterbedingung bestimmt wird. Dies ermöglicht bedingte eindeutige Einschränkungen.
Stellen Sie sich ein Szenario vor, das Eindeutigkeit für (ID, RecordStatus) nur dann erfordert, wenn RecordStatus 1 ist. Die Lösung ist einfach:
<code class="language-sql">CREATE UNIQUE INDEX MyIndex ON MyTable(ID) WHERE RecordStatus = 1;</code>
Dieser Index indiziert nur Zeilen mit RecordStatus = 1
und erzwingt so die Eindeutigkeit dieser Teilmenge. Ein Verstoß gegen diese Einschränkung führt zu einem Fehler:
<code>Msg 2601, Level 14, State 1, Line 13 Cannot insert duplicate key row in object 'dbo.MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).</code>
Wichtige Überlegung
Gefilterte Indizes wurden in SQL Server 2008 eingeführt. Für frühere Versionen sind Trigger oder eine Kombination aus eindeutigen Einschränkungen und Techniken zur Zeilenversionierung notwendige Alternativen.
Das obige ist der detaillierte Inhalt vonWie kann ich bedingte eindeutige Einschränkungen in SQL Server erzwingen, ohne Trigger zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!