Существует ли способ указать, например, 4 отличных значения для varchar столбца в SQL Server MS 2008?
Например, мне нужен столбец под названием Частота (varchar), который только 'ежедневно' принимает, 'Еженедельно', 'Ежемесячно', 'Ежегодно' как возможные значения
Действительно ли это возможно установить в Studio управления SQL Server при составлении таблицы?
Вы уже смотрели на добавление контрольного ограничения
в этот столбец, которое ограничивало бы значения? Примерно так:
CREATE TABLE SomeTable
(
Id int NOT NULL,
Frequency varchar(200),
CONSTRAINT chk_Frequency CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
)
Лично я бы закодировал это как tinyint и:
Причины:
В среднем для хранения текста потребуется 8 байтов, 1 байт для tinyint. Это будет иметь значение для миллионов строк.
А как насчет сопоставления? "Daily" - это то же самое, что "DAILY"? Для такого сравнения требуются ресурсы.
Наконец, что, если вы хотите добавить «Раз в две недели» или «Ежечасно»? Это требует изменения схемы, когда вы можете просто добавлять новые строки в таблицу поиска.
При редактировании таблицы
Щелкните правой кнопкой мыши -> Check Constraints -> Add -> Введите что-то вроде Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly')
в поле выражения и хорошее имя ограничения в поле (Name).
Вы закончили.
Требуется контрольное ограничение .
Ограничения CHECK определяют допустимые значения из логического выражения, которое не основано на данных в другом столбце. Например, диапазон значений для столбца зарплаты может быть ограничен путем создания ограничения CHECK, которое допускает только данные в диапазоне от {{1} }} От 15 000 до 100 000 долларов. Это предотвращает ввод заработной платы за пределы обычного диапазона заработной платы.
Вам нужно что-то вроде:
ALTER TABLE dbo.Table ADD CONSTRAINT CK_Table_Frequency
CHECK (Frequency IN ('Daily', 'Weekly', 'Monthly', 'Yearly'))
Вы также можете реализовать проверочные ограничения с помощью скалярных функций, как описано в приведенной выше ссылке, и я предпочитаю это делать.