CHECK-Einschränkung auf mehrere Spalten
-
26-09-2019 - |
Frage
verwende ich SQL Server 2008
Ich verwende eine CHECK-Einschränkung auf mehreren Spalten in derselben Tabelle zu validieren Dateneingabe zu versuchen.
Ich erhalte eine Fehlermeldung:
Spalte CHECK-Einschränkung für die Spalte ‚AAAA‘ verweist auf eine andere Spalte, Tabelle 'XXXX'.
CHECK CONSTRAINT funktioniert nicht auf diese Weise.
Eine andere Möglichkeit, dies auf einer einzigen Tabelle zu implementieren, ohne Verwendung von FK?
Danke
Hier ist ein Beispiel von meinem Code
CREATE TABLE dbo.Test
(
EffectiveStartDate dateTime2(2) NOT NULL,
EffectiveEndDate dateTime2(2) NOT NULL
CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);
Lösung
Ja, definieren die CHECK CONSTRAINT am Tabelle Ebene
CREATE TABLE foo (
bar int NOT NULL,
fred varchar(50) NOT NULL,
CONSTRAINT CK_foo_stuff CHECK (bar = 1 AND fred ='fish')
)
Sie deklarieren es inline als Spalte Constraint
...
fred varchar(50) NOT NULL CONSTRAINT CK_foo_fred CHECK (...)
...
Bearbeiten, leichter zu schreiben als beschreiben. Feste Ihre Komma.
CREATE TABLE dbo.Test
(
EffectiveStartDate dateTime2(2) NOT NULL,
EffectiveEndDate dateTime2(2) NOT NULL, --need comma
CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate) --no comma
);
Natürlich bleibt die Frage, sind Sie eine CHECK-Einschränkung verwenden, wo es eine FK-Einschränkung sein soll ...?
Andere Tipps
Überprüfen Einschränkungen zu einer einzelnen Spalte oder auf den gesamten Datensatz beziehen.
Verwenden Sie diese Syntax für Datensatzebene Einschränkungen:
ALTER TABLE MyTable
ADD CONSTRAINT MyCheck
CHECK (...your check expression...)
Sie können einfach Ihre Validierung in einem Trigger auf der Tabelle gelten vor allem, dass so oder so wird der Betrieb wieder aufgerollt werden, wenn die Überprüfung fehlgeschlagen ist.