Я использую SQL Server 2008
Я использую ОГРАНИЧЕНИЕ CHECK на несколько столбцов в той же таблице, чтобы попытаться проверить ввод данных.
Я получаю ошибку:
Ограничение CHECK столбца для ссылок столбца 'AAAA' другой столбец, таблица 'XXXX'.
ОГРАНИЧЕНИЕ CHECK не работает таким образом.
Какой-либо другой способ реализовать это на единственной таблице, не используя 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...)
Вы можете просто применить вашу проверку в триггере таблицы, особенно в том случае, если операция будет отменена в любом случае, если проверка не удалась.