Как убедиться, что столбец содержит одно из набора значений? - PullRequest
2 голосов
/ 23 октября 2008

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

CREATE TABLE packages
(
  productCode char(2)
  , name nvarchar(100) 
  , ...
)

Как мне убедиться, что productCode всегда имеет одно из двух значений XJ или XD?

Ответы [ 4 ]

10 голосов
/ 23 октября 2008
ALTER TABLE packages
ADD CONSTRAINT constraintname CHECK (productCode in ('XJ', 'XD'))
8 голосов
/ 23 октября 2008

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

3 голосов
/ 23 октября 2008
CREATE TABLE packages
(
  productCode char(2)
  , name nvarchar(100) 
  , ...
  ,CONSTRAINT productCode CHECK (productCode in ('XJ','XD') )
)
1 голос
/ 23 октября 2008

В этом случае кажется, что набор значений для ProductCode довольно ограничен, и вы не ожидаете, что он будет расти в обозримом будущем, поэтому я склонен согласиться с ответами checkconstraint. Однако в большинстве случаев я бы реализовал решение с использованием внешнего ключа, предложенное г-ном Грантом, поскольку у моих клиентов есть неприятная привычка менять свое мнение (а также требования) примерно раз в день. В этой ситуации мой опыт заключается в том, что версию FK легче поддерживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...