許容値の範囲がハードコーディングせずに別のテーブルから取得されるように、列に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
OneManyTable.TaskID列にCHECK制約を設定して、受け入れ可能な値が別のテーブルの列、つまりMetadataTable.Value(MetadataTable.class ='A')から取得されるようにします。
私はすでにフォーマットのチェック制約を作成しようとしました
TaskID in (Select Value FROM MetadataTable where class= 'A')
しかし、これはサポートされていません。
一方、('Val1'、'Val2')のTaskIDは、SQL2k8(SQL2000ではありません!)ではチェック制約として機能しますが、ハードコーディングのために受け入れられません。
CHECK制約または私が気付いていない他のいくつかの派手なメカニズムを介して、私が望むものを達成する方法は?
PS。データベース側である必要があります。誰かが私に提案したようなクライアント側のチェックはありません。