Ограничить столбец varchar () конкретными значениями? - PullRequest
85 голосов
/ 14 марта 2010

Есть ли способ указать, например, 4 различных значения для столбца varchar в MS SQL Server 2008?

Например, мне нужен столбец с именем Frequency (varchar), который принимает только «Daily», «Weekly», «Monthly», «Yearly» в качестве возможных значений

Можно ли это установить в SQL Server Management Studio при создании таблицы?

Ответы [ 4 ]

117 голосов
/ 14 марта 2010

Вы уже смотрели на добавление check constraint в этот столбец, который ограничивал бы значения? Что-то вроде:

CREATE TABLE SomeTable
(
   Id int NOT NULL,
   Frequency varchar(200),
   CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
)
47 голосов
/ 14 марта 2010

Вы хотите проверочное ограничение .

Ограничения CHECK определяют допустимые значения из логического выражения, которое не на основе данных в другом столбце. За Например, диапазон значений для столбец зарплаты может быть ограничен создавая CHECK ограничение, которое позволяет только данные, которые варьируются от От 15 000 до 100 000 долларов. это предотвращает ввод зарплаты за рамки обычного оклада.

Вы хотите что-то вроде:

ALTER TABLE dbo.Table ADD CONSTRAINT CK_Table_Frequency
    CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))

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

11 голосов
/ 14 марта 2010

Лично я бы закодировал его как tinyint и:

  • Либо: измените текст на клиенте, проверьте ограничение между 1 и 4
  • Или: используйте таблицу поиска с внешним ключом

Причины:

  • Потребуется в среднем 8 байт для хранения текста, 1 байт для tinyint. На миллионах строк это будет иметь значение.

  • А как насчет сопоставления? «Daily» - это то же самое, что «DAILY»? Для такого сравнения требуются ресурсы.

  • Наконец, что если вы хотите добавить «Раз в две недели» или «Часовой»? Это требует изменения схемы, когда вы можете просто добавить новые строки в таблицу поиска.

4 голосов
/ 14 марта 2010

Когда вы редактируете таблицу
Щелкните правой кнопкой мыши -> Проверить ограничения -> Добавить -> Введите что-то вроде Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly') в поле выражения и хорошее имя ограничения в поле (Имя).
Вы сделали.

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