2012-01-19 5 views
1

SQL Server 2008이있는 회사에서 일부 작업을하고 있습니다. 해당 저장 프로 시저 중 하나가 존재하지 않는 열을 참조하거나 참조하는 것으로 보이지만 오류가 없습니다.in-clause 범위 지정

쿼리는이 구조가 있습니다

  select col1, col2 from FOO 
     where col3 in 
     (select id from BAZ where datecreated between @date1 and @date2) 

** BAZ는 [datecreated]하지만라는 컬럼을 포함하지 않습니다 FOO 않습니다 ** 나는 다음과 같이가, 열 이름을 한정 쿼리를 변경하는 경우. IS는 오류입니다 :

 select col1, col2 from FOO 
     where b in 
     (select id from BAZ where BAZ.datecreated between @date1 and @date2) 

이것은 디자인상의 문제로, 관련 문서를 가르쳐 주시겠습니까? 감사합니다

답변

3

이것은 의도적으로 설계된 동작입니다.

correlated sub query의 외부 쿼리에서 열을 액세스하는 것이 완전히 유효합니다. 어떤 경우에는 이것이 바람직한 의미 일 수 있습니다.

+0

+1 - 일반적으로 명확한 설명을 위해 외부 쿼리의 테이블 이름으로 해당 열을 한정하는 것이 좋습니다. – JNK

+0

@JNK - 그래, 이것을 지키지 않으면 [빈 테이블이 생길 수 있습니다.] (http://stackoverflow.com/questions/4594733/sql-server-2008-management-studio-not-checking-the-syntax-of -my-query/4594765 # 4594765)를 사용하면된다. –