ОГРАНИЧЕНИЕ CHECK на несколько столбцов

Я использую 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),
);
21
задан GibboK 9 August 2010 в 07:45
поделиться

3 ответа

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

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

46
ответ дан 29 November 2019 в 20:06
поделиться

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

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

ALTER TABLE MyTable
ADD CONSTRAINT MyCheck
CHECK (...your check expression...)
2
ответ дан 29 November 2019 в 20:06
поделиться

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

1
ответ дан 29 November 2019 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: