2012-01-19 7 views
1

SQL Server 2008を持つ会社の仕事をしています。そのストアドプロシージャの1つは、存在しない列を参照しているか、または参照されているように見えますが、エラーはありません。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)を削除する必要があります。 –