1

次のクエリを実行します。

  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 の記述を強制しようとしますが、前述の問題のようないくつかの事柄はすり抜けてしまう可能性があることに注意してください。

これが理にかなっていることを願っています。必要に応じて、より多くのコンテキストを提供できます。

ティア

4

1 に答える 1

1

ここでのソリューションは、継続的インテグレーションと組み合わせたクエリの単体テストです。JDBC コードの形式のクエリがあります。関連するデータベースに接続するための単体テストを作成し、結果を気にしなくても、少なくとも実行されるかどうかを確認できるようにクエリを実行するのは簡単です。これは、あなたが話している標準です。 .

おそらく、これを拡張してパフォーマンスや結果を測定できますが、これらの種類のテストは非常に脆弱であり、より多くの変更が必然的に発生するため、非常に迅速に壊れる傾向があることがわかりました。

于 2009-05-10T14:06:16.653 に答える