2016-04-28 2 views
0

in節を含むSQL文を記述するとき、in文のカラムが存在しない場合、エラーはスローされず、in文は無視され、結果セットが返されます。以下Azure SQLサーバのIN文がエラーをスローしない

クエリは、T1

SELECT * FROM T1 WHERE Id IN(SELECT Id FROM T2) 

からすべての行を返しますSQL Azureのための正しい振る舞いことですか? ローカルのMS SQLサーバが、カラムが存在しないというエラーをスローします。

+0

として、これはあなたが、あなたはちょうど私のV12のSQL AzureのデータベースでこれをテストしたCSS – TheGameiswar

+0

でバグを報告しなければならないREPROすることができますpossible.ifされていないと再生することができないあなた問題。あなたは、実行している両方のテーブルスキーマと正確なクエリに関する情報を追加できますか? – cbattlegear

答えて

0

これは、Sql Serverと同様の動作です。基本的に、サブクエリのFROM句で参照されているテーブルに存在しないが、外部クエリのFROM句で参照されるテーブルに存在するサブクエリで列が参照されると、クエリはエラーなく実行されます。 SQL Serverは、外部クエリのテーブル名を使用してサブクエリの列を暗黙的に修飾します。 これはここに文書化されている:答えの下で述べた https://technet.microsoft.com/en-us/library/ms178050(v=sql.105).aspx

2

正に、あなたが説明していることは不可能です。 INステートメント内の列が存在しない場合、Azureは例外をスローします。結果セットを返すことはできません。現在、SQL Serverがクエリを実行する方法とAzure v12のやり方にはほとんど違いがありません。それぞれが異なる実行計画を生成する可能性がありますが、本質的に両者の間にはほとんど違いがありません。

+0

私はそれがすべきだと知っていますが、私はそれを再現することができます。 INステートメント内のテーブルにIdという列がなく、そのステートメントを選択すると、INステートメントのテーブルに行がない場合を除き、INステートメントは無視され、結果セットは空になります。 –

+0

それを説明できる唯一のことは、2つのテーブルのスキーマが同一でないことです。 –

関連する問題