ホームページ >データベース >mysql チュートリアル >無効な列参照を含む SQL Server 2008 クエリはどのようにして正常に実行できるのでしょうか?

無効な列参照を含む SQL Server 2008 クエリはどのようにして正常に実行できるのでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-20 01:22:15317ブラウズ

How Can a SQL Server 2008 Query with an Invalid Column Reference Still Execute Successfully?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。