CHECK CONSTRAINT su più colonne
-
26-09-2019 - |
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),
);
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.