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),
);
War es hilfreich?

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.

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