sql >> データベース >  >> RDS >> Sqlserver

SQL Server ステートメントの実行順序

    これは、SQL Server の既知の "機能" です。 WHERE 句が SELECT 句の前に実行されると想定しないでください。

    参照:SQL Server は非論理的なエラーを起こさない

    実際には、それを行うのには十分な理由があります。 A が B よりもはるかに小さい 2 つのテーブルを結合することを検討してください。

    select CAST(A.col1 as int), A.col2, B.col3
    from A join B ...
    where ... isnumeric(A.col1) = 1
    

    生成されたクエリ プランを検査すると、正しいか間違っているかに関係なく、SQL サーバーは A からのデータを B に対して結合する先行行としてストリーミングします。 そして col1 の関数 . col1 をもたらす可能性があります 後で関数を実行するためだけに、または CAST のような些細なことのために、SQL Server はストリーミング プロセス中にデータを変換することもできます。

    確かなことは、この戦略により、特定のクエリで SQL Server が少し速くなることです。しかし、純粋に論理的な観点から言えば、私はこれをバグと呼んでいます.



    1. トリガーエラーORA-04092ORA-04088

    2. MySQLデータベースに挿入ステートメントの後に列に値を自動割り当てさせることはできますか?

    3. SQL Server - BEFORE INSERT トリガー

    4. 主キーインデックスの範囲ロックからのデッドロック