首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在H2中选择但带有数据库前缀

在H2中选择但带有数据库前缀
EN

Stack Overflow用户
提问于 2021-05-19 09:20:10
回答 1查看 119关注 0票数 0

在工作中,我分配了一个任务来查询位于同一台主机上的多个MSSQL数据库中的数据,其中只有一个查询。它工作得很好,看起来就像这样:

代码语言:javascript
运行
复制
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中避免这种情况,或者我需要对不同的数据库执行两个单独的调用,然后将结果合并在一起,只是为了测试?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-20 03:39:13

如果userDb.dboproductDb.dbo中的名称都是唯一的,则可以在一个H2数据库中创建所有表,并将;IGNORE_CATALOGS=TRUE附加到JDBC。

(您还可以使用两个单独的数据库,并使用CREATE LINKED TABLE命令为每个表创建链接,但是链接表可能比较慢。)

如果您的表具有相同的名称(来自不同的数据库),那么在H2中将无法区分它们,像… userDb.dbo.table1 JOIN productDb.dbo.table1 …这样的联接将引用相同的表dbo.table1两次。

您还可以在数据库中使用不同的模式名称(dbo),在这种情况下,您可以在同一个数据库中同时创建它们,productDb.productDbo.table1userDb.userDbo.table1将具有不同的含义(productDbo.table1userDbo.table1)。

无论如何,如果在生产中只使用一个DBMS,那么通常应该在测试用例中使用相同的DBMS,最好设置相同。否则,您将不时地遇到不同的不兼容,在某些情况下,在您的测试中工作的代码可能会失败,甚至在生产数据库中返回不同的结果。在逻辑根本不特定于数据库的情况下,对于另一个DBMS中的某些测试,可能会有各种有效的用例,但即使在它们中也可能出现一些偏差。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67600370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档