2010-06-08 2 views
0

값이 다른 sql 쿼리에 의해 주어진 결과 집합에 속하는 열 중 하나에 대해 CHECK 제약 조건이있는 테이블을 만들 수 있습니까값이 SQL 쿼리에 종속적 인 check 제약 조건을 가진 테이블을 만들 수 있습니까

예.

create table tablename 
(
name varchar(10), 
rollno int 
)check rollno in (select rollno from anotherDatabase.TableName,candidateRoll) 

또는 이와 유사한 것.

아무 데서도 사용해야하지 않지만 여전히 알고 싶습니다.

답변

2

외래 키 참조로 원하는 것을 얻을 수 없으면 함수 호출에서 SELECT 문을 래핑 할 수 있습니다.

귀하의 점검 제한 조건의 표현과 같이 보일 수 있습니다 :

create function dbo.SomeFunction(@arg varchar(max)) 
returns bit 
as 
begin 
return 
(
    select count(*) from SomeOthertable where col2 = @arg 
) 
end 

EDIT (2010년 6월 9일 :이 기능은 다음과 같을 수

(dbo.SomeFunction([col1]) != 0) 

를 (열을 가정하는 것은 VARCHAR입니다)) : 앤서니 (Anthony)의 의견에 관해서는, 나의 테스트에 의하면 count(*) 값이 1보다 여전히 1로 반환되는 것으로 나타났습니다. 따라서 분명히 1이나 0을 반환해야한다고해도 함수가 괜찮은 것처럼 보일 것입니다. 또는 실제 행 개수에 관심이있는 경우 반환 유형을 BIT에서 INT로 변경하십시오.

+0

좋은 해결책입니다. int에서 bit 로의 암묵적인 변환은 약간 두려운데, COUNT (*)> 1 일 경우 어떻게됩니까? –

+0

좋은 지적입니다. 지금까지 기본 키에 대해서만이 접근법을 사용 했으므로 COUNT (*)> 1의 가능성은 없습니다. –

1

예 : 그것은 다른 데이터베이스는 다음 예를 들어, 코드를 사용의 경우 동일한 데이터베이스에 대한 외부 키

create table tablename 
(
name varchar(10), 
rollno int FOREIGN KEY (candidateRoll) REFERENCES OtherTableName (candidateRoll) 
) 

링크 저장된 프로 시저를 통해 삽입하거나 트리거를 통해 시행

+0

그러나 교차 데이터베이스 관계를 적용 할 수는 없습니다. – Madhivanan

+0

@Madhivanan : 엄밀히 말하면, "데이터베이스 간 관계"는 없습니다. 관련성이있는 경우 동일한 데이터베이스입니다. 이 시나리오에 대해서도 트리거 및 저장 프로 시저를 언급했습니다. – gbn