De restricción de comprobación en varias columnas
-
26-09-2019 - |
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),
);
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.