Как можно наложить ограничение CHECK на столбец так, чтобы его диапазон допустимых значений был взят из другой таблицы, без жесткого кодирования?
Вот упрощенный пример:
OneManyTable
RoleID TaskID
10 Val1
10 Val2
20 Val1
20 Val2
MetaDataTable
pkID Class Value
1 A Val1
2 A Val2
3 B Val3
4 B Val4
Я хочупоместить ограничение CHECK в столбец OneManyTable.TaskID таким образом, чтобы допустимые значения исходили из столбца другой таблицы, т.е. из MetadataTable.Value, где MetadataTable.class = 'A'
Я уже пытался создать ограничение CHECK в формате
TaskID in (Select Value FROM MetadataTable where class= 'A')
НО ЭТО НЕ ПОДДЕРЖИВАЕТСЯ.
С другой стороны, TaskID в ('Val1', 'Val2') работает как проверочное ограничение в SQL2k8 (не в SQL2000!), Ноэто неприемлемо из-за жесткого кодирования.
Как добиться того, чего я хочу, через ограничение CHECK или какой-то другой причудливый механизм, о котором я не знаю?
PS.Должно быть на стороне базы данных, никаких проверок на стороне клиента, как мне кто-то предлагал.