ПРОВЕРИТЬ ОГРАНИЧЕНИЕ для нескольких столбцов

StackOverflow https://stackoverflow.com/questions/3438066

Вопрос

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

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

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

Ограничение проверки столбца для столбца «AAAA» ссылается на другой столбец, таблица «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),
);
Это было полезно?

Решение

Да, определите ПРОВЕРОЧНОЕ ОГРАНИЧЕНИЕ в стол уровень

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...?

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top