SQL Server - проверьте ограничение на столбец, где значения происходят из другой таблицы
-
12-09-2020 - |
Вопрос
Как можно провести проверку ограничения на столбец, так что его диапазон приемлемых значений поступает из другой таблицы, без жесткого класса?
Вот упрощенный пример:
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
.
Я хочу поставить проверку ограничения на oneManytable.taskiD столбец такой, что приемлемые значения поступают из столбца других таблиц, то есть из метаданатабие. Valueue, где метадатат .Class= 'A'
Я уже пытался создать проверку ограничения формата
TaskID in (Select Value FROM MetadataTable where class= 'A')
.
Но это не поддерживается.
С другой стороны, TaskiD в ('val1', 'val2') работает как ограничение проверки в SQL2K8 (не в SQL2000!), Но это не приемлемо из-за жесткого класса.
Как добиться того, что я хочу, будь то через проверку ограничения или какой-то другой модный механизм, о котором я не знаю?
PS.Должен быть на стороне базы данных, нет проверки на стороне клиента, как это было предложено кому-то.
Решение
Это, вероятно, не очень хорошая практика, чтобы войти, но вы можете написать пользовательскую функцию, которая принимает вашу задачу в качестве параметра, и он его оценивает в зависимости от True или False в зависимости от того, находится ли пользовательская задача в зависимости от того, падает ли пользовательВаш метаданообразный.
Это позволит вам получить функциональность, которую вы ищете - проверки ограничения действительно просто предназначены для того, чтобы быть простыми функциями, предназначенными для ограничения диапазона колонны, и их поведение было разработано с этим в виду, так что именно поэтому выНе могу писать подзапросы в рамках проверки ограничения на SQL Server.
Вы можете написать оператор SELECT в функции определенной пользователем и вызовите его из проверки ограничения.
Другие советы
Проверка ограничения от значений из другой таблицы, как правило, будет разработана как ограничение внешнего ключа.Это механизм, предназначенный для связи таблицы на значениях.
Проверка ограничений действительно предназначена только для определения
- .
- Минимальные или максимальные значения
- диапазоны
- Перечисления данного набора значений
Так что я не думаю, что вы можете сделать то, что вы пытаетесь сделать, потому что это действительно неправильная функция, которую вы пытаетесь использовать для этого.