Подтвердить что ты не робот

ПРОВЕРИТЬ КОНСТРАКЦИЮ на несколько столбцов

Я использую SQL Server 2008

Я использую CHECK CONSTRAINT для нескольких столбцов в одной таблице, чтобы попытаться проверить ввод данных.

Я получаю сообщение об ошибке:

Ограничение столбца CHECK для столбца "AAAA" ссылается на другую колонку, table 'XXXX'.

CHECK CONSTRAINT не работает таким образом.

Любой другой способ реализовать это на одной таблице без использования FK?

Спасибо

Вот пример моего кода

CREATE TABLE dbo.Test 
(   
EffectiveStartDate  dateTime2(2)        NOT NULL,
EffectiveEndDate    dateTime2(2)        NOT NULL
    CONSTRAINT CK_CmsSponsoredContents_EffectiveEndDate CHECK (EffectiveEndDate > EffectiveStartDate),
);
4b9b3361

Ответ 1

Да, определите ПРОВЕРКА ПРОВЕРКИ на уровне таблицы

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

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

Вы объявляете его встроенным как ограничение столбца

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

Изменить, проще разместить, чем описать. Исправлена ​​запятая.

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

Конечно, остается вопрос: вы используете ограничение CHECK, где это должно быть ограничение FK...?

Ответ 2

Проверить ограничения могут ссылаться на один столбец или на всю запись.

Используйте этот синтаксис для ограничений уровня записи:

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

Ответ 3

Вы можете просто применить свою проверку в триггере на столе, особенно в любом случае, когда операция будет отменена, если проверка завершилась неудачно.