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

StackOverflow https://stackoverflow.com/questions/3804663

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?

War es hilfreich?

Lösung

Bearbeiten

Eigentlich habe ich nur bemerkt, dass Sie auf SQL Server 2008 sind, könnten Sie einen gefilterten Index für dieses

verwenden
CREATE 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ügen
case when col=1 then -1 else id end

und fügen Sie eine eindeutige Einschränkung darauf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top