SQL Server - 값이 다른 테이블에서 오는 열에 제한 조건을 확인하십시오.

StackOverflow https://stackoverflow.com/questions/3200795

문제

하드 코딩없이 허용 가능한 값 범위 범위가 다른 테이블에서 가져 오도록 수표 제약 조건을 어떻게 만드는가?

여기 간소화 된 예입니다.

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
.

I OnemanyTable.TaskID 열에 대한 수표 제약 조건을 넣고 싶습니다. 다른 테이블의 열에서 다른 테이블의 열에서 가져 왔습니다. I.E.E.E.E.E.E.E.E.E.TADATATABLE.CLASS= 'A'

Format

형식의 체크 제약 조건 작성을 시도했습니다.
TaskID in (Select Value FROM MetadataTable where class= 'A')
.

그러나 이것은 지원되지 않습니다.

( 'val1', 'val2')는 SQL2K8 (SQL2000이 아닌)에서 확인 제한 조건으로 작동하지만 하드 코딩으로 인해 허용되지 않습니다.

내가 원하는 것을 달성하는 방법, 체크 제약 또는 내가 알지 못하는 다른 어떤 멋진 메커니즘을 통해

ps.데이터베이스 측에 있어야하고, 누군가가 제안한 클라이언트 측 검사가 없었습니다.

도움이 되었습니까?

해결책

그것은 아마도 들어가는 것이 좋지 않을 것입니다.하지만 작업을 매개 변수로 받아들이고 작업이 제공된 범위 내에 있는지 여부에 따라 true 또는 false로 평가되는 사용자 정의 함수를 작성할 수 있습니다.귀하의 메타 싸이 가능.

당신이 찾고있는 기능을 얻을 수 있습니다 - 체크 제약 조건은 정말로 열의 범위를 제한하도록 설계된 간단한 기능을 의미하며, 그 이유는 당신이SQL Server에서 체크 제한 조건 내에 하위 쿼리를 작성할 수 없습니다.

사용자 정의 함수 내에서 SELECT 문을 작성하고 체크 제한 조건에서 호출 할 수 있습니다.

다른 팁

다른 테이블의 값에 대한 확인 제한 조건은 일반적으로 외래 키 제약 조건으로 설계됩니다.이는 테이블을 값에 연결하도록 설계된 메커니즘입니다.

Check 제약 조건은 실제로

를 정의하도록 설계되었습니다.

  • 최소 또는 최대 값
  • 범위
  • 주어진 값 세트의 열거

그래서 나는 당신이하려는 것을 할 수 있다고 생각하지 않습니다. 왜냐하면 그것이 당신이 그걸로 사용하려고하는 잘못된 기능이기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top