Ответы:
Это не так. Есть неопределенный эквивалент:
mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown'))
Лучшее решение, которое я нашел в этом, - создать таблицу поиска с возможными значениями в качестве первичного ключа и создать внешний ключ для таблицы поиска.
ИМХО таблицы поиска - это путь со ссылочной целостностью. Но только в том случае, если вы избегаете "зловещих магических чисел", следуя примеру, подобному этому: сгенерировать перечисление из таблицы поиска базы данных с помощью T4
Радоваться, веселиться!
CREATE FUNCTION ActionState_Preassigned()
RETURNS tinyint
AS
BEGIN
RETURN 0
END
GO
CREATE FUNCTION ActionState_Unassigned()
RETURNS tinyint
AS
BEGIN
RETURN 1
END
-- etc...
Если производительность имеет значение, по-прежнему используйте жесткие значения.
Обнаружил этот интересный подход, когда хотел реализовать перечисления в SQL Server.
Подход, упомянутый ниже в ссылке, довольно убедителен, учитывая, что все ваши потребности в перечислении базы данных могут быть удовлетворены с помощью двух центральных таблиц.