SQL Server: restricción CHECK en una columna donde los valores provienen de otra tabla
¿Cómo se pone una restricción CHECK en una columna de modo que su rango de valores aceptables provenga de otra tabla, sin codificación?
Aquí hay un ejemplo simplificado:
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
Quiero poner una restricción CHECK en la columna OneManyTable.TaskID para que los valores aceptables provengan de la columna de otra tabla, es decir, de MetadataTable.Value donde MetadataTable.class = 'A'
Ya intenté crear una restricción CHECK del formato
TaskID in (Select Value FROM MetadataTable where class= 'A')
Pero esto no es compatible.
Por otro lado, TaskID en ('Val1', 'Val2') funciona como una restricción de verificación en SQL2k8 (¡no en SQL2000!), Pero no es aceptable debido a la codificación rígida.
¿Cómo lograr lo que quiero, ya sea a través de la restricción CHECK o algún otro mecanismo elegante del que no tenga conocimiento?
PD. Tiene que estar en el lado de la base de datos, sin verificación del lado del cliente, como me lo ha sugerido alguien.