接受这个查询:
SELECT *
FROM MyTable
WHERE MyColumn = 'SomeValue'
ORDER BY SomeFakeQualifier.MyColumn DESC
在这种情况下,似乎 SqlServer 只是忽略了限定符。如果你添加一个JOIN
,那么它会考虑它。
这真的不是问题,除非您想让您的查询在 DBMS 供应商中可行。例如,Oracle 会理所当然地抱怨限定符无效。
是的,我们使用 ORM 消除了很多这种情况,但我们仍然需要 JDBC 来执行某些操作(这是我们产品的本质及其对动态查询的支持)。事实上,正是因为如此,才出现了这个问题——有人将 JPA 命名查询复制到了 JDBC 提供的查询中,但留下了对象名而不是表名。
所以我想问题是:还有其他人遇到过这个吗?如果是这样,测试代码以确保它可以在“主要三个”DBMS(SqlServer、Oracle、DB2)上工作的最佳方法是什么?我们有一个 QA 团队,但似乎应该有更好的方法来对这些特质进行单元测试。
请注意,我们总是尝试强制编写 ANSI SQL 以避免出现问题,但有些事情,比如前面提到的问题,可能会漏掉
我希望这是有道理的。如有必要,我可以提供更多上下文。
TIA