Подтвердить что ты не робот

Имеет ли SQL Server 2005 эквивалент типа данных MySql ENUM?

Я работаю над проектом, и хочу сохранить в таблице некоторую легко перечислимую информацию. Тип данных MySql enum делает именно то, что я хочу: http://dev.mysql.com/doc/refman/5.0/en/enum.html. Есть ли эквивалент в SQL Server 2005?

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

4b9b3361

Ответ 1

Это работает для вас?

От http://blechie.com/wtilton/archive/2007/08/24/303.aspx

Создать таблицу...

MySQL

ColumnName ENUM('upload', 'open', 'close', 'delete', 'edit', 'add')
   DEFAULT 'open'

SQL Server:

ColumnName varchar(10) 
   CHECK(ColumnName IN ('upload', 'open', 'close', 'delete', 'edit', 'add')) 
   DEFAULT 'open'

Ответ 2

Одной из характеристик типа данных MySQL ENUM является то, что в каждой строке хранится только числовой индекс в списке значений, а не сама строка. Поэтому он обычно более эффективен с точки зрения хранения. Также поведение по умолчанию при сортировке по столбцу ENUM состоит в сортировке по числовому индексу, поэтому по порядку элементов в ENUM.

Nikki9696 предлагает использовать столбец VARCHAR с ограничением CHECK. Это удовлетворяет ограничению значений в некоторый короткий список допустимых значений, но не имитирует эффективность хранения или специальный порядок сортировки.

Один из способов получить оба поведения - объявить столбец как целочисленный внешний ключ в таблицу поиска, в которой вы сохраняете каждую разрешенную строку.