ホームページ >データベース >mysql チュートリアル >無効な列参照を含む SQL Server 2008 クエリはどのようにして正常に実行できるのでしょうか?
SQL Server 2008 Management Studio: 無効な構文にもかかわらず予期しないクエリが実行される
SQL Server 2008 Management Studio は、構文エラーに関して直感に反する動作を示すことがあります。 最近のケースでは、サブクエリ内に存在しない列 (「hs_id」) を参照するクエリが含まれていましたが、クエリはエラーなしで実行されました。
クエリの構造は、この動作を理解するための鍵となります。外側の DELETE
ステートメントは Photo
テーブルをターゲットにし、サブクエリを使用して削除する行を識別します。 このサブクエリは、「id = 142」である HotelSupplier
テーブルから「hs_id」を選択します。
エラーはサブクエリにあります: HotelSupplier
には「hs_id」という名前の列がありません。正しい列名は「hs_key」です。 ただし、外側のクエリには ( テーブル内の) "hs_id" が含まれていますPhoto
。 これにより、SQL Server はサブクエリ内のあいまいな "hs_id" 参照を Photo
テーブルの "hs_id" 列に解決できるようになります。
その結果、サブクエリは、Photo
テーブルのデータに基づいて一連の「hs_id」値を返します。これらの値は、DELETE
操作のフィルター処理に使用されます。 最初の構文エラーにもかかわらず、クエリが正常に実行されるのは、この暗黙的な列解決によるものです。
この動作は驚くべきことかもしれませんが、本質的に問題があるわけではありません。これは、曖昧さを防ぎ、データの整合性を維持するために、(完全修飾名またはエイリアスを使用して) 明示的に列を参照することが重要であることを強調しています。
以上が無効な列参照を含む SQL Server 2008 クエリはどのようにして正常に実行できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。