ПРОВЕРИТЬ ОГРАНИЧЕНИЕ для нескольких столбцов
-
26-09-2019 - |
Вопрос
Я использую 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...)
Вы можете просто применить вашу проверку в триггере на столе, особенно в том, что в любом случае операция будет возвращена, если проверка не удалась.