Ограничить varchar () столбец к определенным значениям?

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

Например, мне нужен столбец под названием Частота (varchar), который только 'ежедневно' принимает, 'Еженедельно', 'Ежемесячно', 'Ежегодно' как возможные значения

Действительно ли это возможно установить в Studio управления SQL Server при составлении таблицы?

91
задан Dylan Corriveau 12 May 2015 в 13:35
поделиться

4 ответа

Вы уже смотрели на добавление контрольного ограничения в этот столбец, которое ограничивало бы значения? Примерно так:

CREATE TABLE SomeTable
(
   Id int NOT NULL,
   Frequency varchar(200),
   CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
)
124
ответ дан 24 November 2019 в 06:45
поделиться

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

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

Причины:

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

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

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

11
ответ дан 24 November 2019 в 06:45
поделиться

При редактировании таблицы
Щелкните правой кнопкой мыши -> Check Constraints -> Add -> Введите что-то вроде Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly') в поле выражения и хорошее имя ограничения в поле (Name).
Вы закончили.

5
ответ дан 24 November 2019 в 06:45
поделиться

Требуется контрольное ограничение .

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

Вам нужно что-то вроде:

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

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

51
ответ дан 24 November 2019 в 06:45
поделиться
Другие вопросы по тегам:

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