次のクエリを実行します。
SELECT *
FROM MyTable
WHERE MyColumn = 'SomeValue'
ORDER BY SomeFakeQualifier.MyColumn DESC
この場合、SqlServer は修飾子を無視しているようです。を追加するJOIN
と、それが考慮されます。
クエリを DBMS ベンダー間で実行可能にするまでは、これは実際には問題ではありません。たとえば、オラクルは、当然のことながら、修飾子が無効であると文句を言います。
はい、私たちは ORM を使用してこの多くを排除しますが、一部のアクションにはまだ JDBC が必要です (これは製品の性質であり、動的クエリのサポートです)。実際、この問題が発生したのはこのためです。誰かが JPA という名前のクエリを JDBC 提供のクエリにコピーしましたが、テーブル名ではなくオブジェクト名を残しました。
だから私は質問だと思います:他の誰かがこれに出くわしましたか?もしそうなら、コードをテストして「主要な 3 つの」DBMS (SqlServer、Oracle、DB2) で動作することを確認する最善の方法は何ですか? 私たちには QA チームがありますが、これらの特異性を単体テストするためのより良い方法があるはずです。
問題を回避するために常に ANSI SQL の記述を強制しようとしますが、前述の問題のようないくつかの事柄はすり抜けてしまう可能性があることに注意してください。
これが理にかなっていることを願っています。必要に応じて、より多くのコンテキストを提供できます。
ティア