Testing 跨多个DBMS供应商进行测试

Testing 跨多个DBMS供应商进行测试,testing,rdbms,database,Testing,Rdbms,Database,以这个查询为例: SELECT * FROM MyTable WHERE MyColumn = 'SomeValue' ORDER BY SomeFakeQualifier.MyColumn DESC 在这种情况下,SqlServer似乎只是忽略了限定符。如果你添加一个连接< /代码>,那么它会考虑它。 这实际上不是一个问题,除非您想使您的查询在DBMS供应商之间可行。例如,甲骨文(Oracle)会理所当然地抱怨限定符无效 是的,我们使用的ORM消除了很多这方面的问题,但是我

以这个查询为例:

  SELECT *
    FROM MyTable
   WHERE MyColumn = 'SomeValue'
ORDER BY SomeFakeQualifier.MyColumn DESC
在这种情况下,SqlServer似乎只是忽略了限定符。如果你添加一个<代码>连接< /代码>,那么它会考虑它。

这实际上不是一个问题,除非您想使您的查询在DBMS供应商之间可行。例如,甲骨文(Oracle)会理所当然地抱怨限定符无效

是的,我们使用的ORM消除了很多这方面的问题,但是我们仍然需要JDBC来执行一些操作(这是我们产品的特性,以及它对动态查询的支持)。事实上,正是由于这个原因,才出现了这个问题-有人将一个名为JPA的查询复制到JDBC提供的查询中,但保留在对象名而不是表名中

所以我想问题是:还有其他人遇到过这个吗?如果是这样,测试代码以确保其在“三大”DBMS(SqlServer、Oracle、DB2)中工作的最佳方法是什么?我们有一个QA团队,但似乎应该有更好的方法来对这些特性进行单元测试

注意,我们总是试图强制编写ANSI SQL以避免出现问题,但有些事情,比如前面提到的问题,可能会漏掉

我希望这是有道理的。如有必要,我可以提供更多的上下文


TIA

您的解决方案实际上是对查询进行单元测试,并将其与。您有JDBC代码形式的查询。编写单元测试以连接到相关数据库并以这样一种方式运行查询是很容易的,即您至少可以看到它们是否执行,即使您不关心结果,这是您正在谈论的标准


可以说,您可以扩展它来衡量性能和/或结果,但我发现这些类型的测试非常脆弱,而且随着不可避免地发生更多的更改,它们往往会非常、非常迅速地中断。

您的解决方案实际上是对查询进行单元测试,再加上。您有JDBC代码形式的查询。编写单元测试以连接到相关数据库并以这样一种方式运行查询是很容易的,即您至少可以看到它们是否执行,即使您不关心结果,这是您正在谈论的标准

可以说,您可以扩展它来衡量性能和/或结果,但我发现这些类型的测试非常脆弱,并且随着不可避免地发生更多变化,它们往往会非常、非常迅速地中断