Heim >Datenbank >MySQL-Tutorial >Wie erzwinge ich eindeutige Einschränkungen für Nullable-Spalten in SQL Server?
Eindeutige Nicht-NULL-Einschränkungen für NULL-fähige Spalten
Oft ist es wünschenswert, die Eindeutigkeit einer Spalte zu erzwingen und gleichzeitig Nullwerte zuzulassen. Das Erstellen eines eindeutigen Index für eine NULLable-Spalte in SQL Server 2005 kann jedoch eine Herausforderung sein.
Aktuelle Lösungen
Eine häufige Problemumgehung besteht darin, einen eindeutigen Index für eine materialisierte Spalte zu erstellen Ansicht, die Nullwerte ausschließt:
CREATE VIEW vw_unq WITH SCHEMABINDING AS SELECT Column1 FROM MyTable WHERE Column1 IS NOT NULL CREATE UNIQUE CLUSTERED INDEX unq_idx ON vw_unq (Column1)
Besser Alternativen
SQL Server 2008 hat gefilterte Indizes eingeführt, die eine bessere Lösung bieten:
CREATE UNIQUE INDEX AK_MyTable_Column1 ON MyTable (Column1) WHERE Column1 IS NOT NULL
Dieser Index lässt Nullwerte zu und erzwingt gleichzeitig die Eindeutigkeit bei Nicht-Null-Werten.
Zusätzliche Option: Trigger
Eine weitere Alternative besteht darin, einen Trigger zu erstellen um bei Einfüge- und Aktualisierungsvorgängen auf Eindeutigkeit zu prüfen:
CREATE TRIGGER trg_MyTable_CheckUnique ON MyTable AFTER INSERT, UPDATE AS BEGIN IF EXISTS(SELECT * FROM MyTable WHERE Column1 = NEW.Column1 AND Column1 IS NOT NULL) BEGIN RAISERROR('Duplicate value for Column1.', 16, 1) END END
Trigger können sich jedoch auf die Leistung auswirken, insbesondere auf Systemen mit hoher Parallelität.
Das obige ist der detaillierte Inhalt vonWie erzwinge ich eindeutige Einschränkungen für Nullable-Spalten in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!