在工作中,我分配了一个任务来查询位于同一台主机上的多个MSSQL数据库中的数据,其中只有一个查询。它工作得很好,看起来就像这样:
SELECT
user.name as userName,
product.name as productName
FROM
userDb.dbo.userTable user
INNER JOIN productDb.dbo.productTable product on user.id = product.buyer
WHERE user.id = ?然而,当我想扩展使用模拟H2数据库的端到端测试解决方案时,我意识到H2不支持这样的数据库。“架构productDb未找到”查询失败。虽然productDb应该是数据库,但是模式是dbo,表是productTable。
是否有办法在H2中避免这种情况,或者我需要对不同的数据库执行两个单独的调用,然后将结果合并在一起,只是为了测试?
发布于 2021-05-20 03:39:13
如果userDb.dbo和productDb.dbo中的名称都是唯一的,则可以在一个H2数据库中创建所有表,并将;IGNORE_CATALOGS=TRUE附加到JDBC。
(您还可以使用两个单独的数据库,并使用CREATE LINKED TABLE命令为每个表创建链接,但是链接表可能比较慢。)
如果您的表具有相同的名称(来自不同的数据库),那么在H2中将无法区分它们,像… userDb.dbo.table1 JOIN productDb.dbo.table1 …这样的联接将引用相同的表dbo.table1两次。
您还可以在数据库中使用不同的模式名称(dbo),在这种情况下,您可以在同一个数据库中同时创建它们,productDb.productDbo.table1和userDb.userDbo.table1将具有不同的含义(productDbo.table1和userDbo.table1)。
无论如何,如果在生产中只使用一个DBMS,那么通常应该在测试用例中使用相同的DBMS,最好设置相同。否则,您将不时地遇到不同的不兼容,在某些情况下,在您的测试中工作的代码可能会失败,甚至在生产数据库中返回不同的结果。在逻辑根本不特定于数据库的情况下,对于另一个DBMS中的某些测试,可能会有各种有效的用例,但即使在它们中也可能出现一些偏差。
https://stackoverflow.com/questions/67600370
复制相似问题