SQL Server 2008: Überprüfen Sie Einschränkungen, die gewährleistet, dass nur ein Wert in allen Zeilen auf 1 gesetzt ist und andere sind 0
-
25-09-2019 - |
Frage
Es ist notwendig, zu bauen Einschränkung für die Spalte, die garantiert, dass nur ein Wert in allen Zeilen 1 und alle anderen sind 0.
Lösung mit Trigger existiert, aber ich möchte etwas haben, eingebaut.
Ist so etwas möglich?
Lösung
Bearbeiten
Eigentlich habe ich nur bemerkt, dass Sie auf SQL Server 2008 sind, könnten Sie einen gefilterten Index für dieses
verwendenCREATE UNIQUE NONCLUSTERED INDEX UIX ON YourTable (col) where col = 1
Original Antwort
Der einfachste Weg wäre wahrscheinlich dieses ein besonderes Stück in einer separaten Zeile Tabelle zu speichern sein. Die nicht mehr als eine Zeile Aspekt kann mit Check-Einschränkungen erzwungen werden.
CREATE TABLE OneRowTable
(
lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY CHECK (lock = 'X'),
OtherTablePK int
);
Ansonsten vorausgesetzt, Sie könnten ein ID-Feld der positiven ganzen Zahlen haben Sie eine berechnete Spalte mit folgenden Definition
könnten hinzufügencase when col=1 then -1 else id end
und fügen Sie eine eindeutige Einschränkung darauf.