Pregunta

Yo uso de SQL Server 2008

Yo uso una restricción CHECK en múltiples columnas en la misma mesa para tratar de validar la entrada de datos.

Recibo un error:

  

Columna restricción CHECK para la columna   referencias 'AAAA' otra columna,   tabla 'XXXX'.

restricción CHECK no funciona de esta manera.

Cualquier otra forma de implementar esto en una sola tabla sin usar FK?

Gracias

A continuación, un ejemplo de mi código

CREATE TABLE dbo.Test 
(   
EffectiveStartDate  dateTime2(2)        NOT NULL,
EffectiveEndDate    dateTime2(2)        NOT NULL
    CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);
¿Fue útil?

Solución

Sí, definir la restricción CHECK en el tabla Nivel

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

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

lo estás expresando en línea como una columna restricción

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

Editar, más fácil de enviar a describir. Fija sus comas.

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

Por supuesto, la pregunta sigue siendo ¿Está utilizando una restricción CHECK donde debe ser una restricción FK ...?

Otros consejos

Restricciones de comprobación puede referirse a una sola columna o de todo el disco.

Utilice esta sintaxis para las restricciones a nivel de registro:?

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

Simplemente puede aplicar su validación en un desencadenador en la tabla especial que en cualquier caso la operación se revertirá si el cheque no.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top