構文エラーによる SQL Server Management Studio の予期しない動作
SQL Server Management Studio (SSMS) は、時折驚くべき動作を示します。クエリ内の構文エラーを見逃しているように見える場合があります。これは予期しない結果を招く可能性があり、SQL 開発におけるエラーの原因となることがよくあります。 ケーススタディを見てみましょう:
たとえば、次のクエリは SSMS でエラーを生成せずに実行されます。
<code class="language-sql">delete from Photo where hs_id in (select hs_id from HotelSupplier where id = 142)</code>
しかし、hs_id
列は HotelSupplier
テーブルに存在しません。 サブクエリを単独で実行すると、エラーが発生します。
この不一致の理由は、修飾されていない列参照の処理にあります。 SQL では、列が属するテーブルを明示的に指定せずに列を参照できます。 この例では、SSMS はサブクエリ内の hs_id
を Photo
テーブル (外側のクエリ) に属しているものとして解釈します。
<code class="language-sql">delete from Photo where Photo.hs_id in (select Photo.hs_id from HotelSupplier where id = 142)</code>
<code class="language-sql">delete from Photo where Photo.hs_id = Photo.hs_id</code>
が NULL でない Photo
テーブル内のすべての行は、hs_id
に HotelSupplier
を含む行が含まれているかどうかに関係なく、削除されます。id = 142
以上がSQL Server Management Studio がクエリ内の構文エラーを無視しているように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。