Domanda

Io uso di SQL Server 2008

Io uso un vincolo CHECK su più colonne nella stessa tabella per cercare di immissione dei dati validate.

ricevo un errore:

  

Colonna vincolo CHECK per la colonna   Riferimenti 'AAAA' un'altra colonna,   tabella 'XXXX'.

CHECK CONSTRAINT non funziona in questo modo.

Ogni altro modo per implementare questo su un unico tavolo senza usare FK?

Grazie

Ecco un esempio del mio codice

CREATE TABLE dbo.Test 
(   
EffectiveStartDate  dateTime2(2)        NOT NULL,
EffectiveEndDate    dateTime2(2)        NOT NULL
    CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);
È stato utile?

Soluzione

Sì, definire il CHECK CONSTRAINT al tabella livello

CREATE TABLE foo (
   bar int NOT NULL, 
   fred varchar(50) NOT NULL,

   CONSTRAINT CK_foo_stuff CHECK (bar = 1 AND fred ='fish')
)

Si dichiarandolo in linea come una colonna vincolo

...
fred varchar(50) NOT NULL CONSTRAINT CK_foo_fred CHECK (...)
...

Modifica, più facile per pubblicare che descrivere. Fissa i tuoi virgole.

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
);

Naturalmente, i resti di domanda si sta utilizzando un vincolo CHECK dove dovrebbe essere un vincolo FK ...?

Altri suggerimenti

Controlla i vincoli può fare riferimento a una singola colonna o per tutto il disco.

Utilizzare questa sintassi per i vincoli a livello di record:

ALTER TABLE MyTable
ADD CONSTRAINT MyCheck
CHECK (...your check expression...)

Si può semplicemente applicare la convalida in un trigger nella tabella in particolare che in entrambi i casi l'operazione sarà il rollback se il controllo non è riuscita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top