HyperSQL中如何支持支持SqlServer的“..”?
Posted
技术标签:
【中文标题】HyperSQL中如何支持支持SqlServer的“..”?【英文标题】:How to support support SqlServer's ".." in HyperSQL? 【发布时间】:2011-09-15 14:17:28 【问题描述】:tl;dr:我正在尝试对一些 SqlServer 查询进行单元测试,这些查询声明了数据库名称,但它们似乎在 HyperSql 中不起作用。
我们在生产中使用 Sql Server,我正在尝试使用 HyperSQL 作为我的数据库进行单元测试。我正在尝试测试一个创建 SQL 查询的类,因此不能选择存根数据库,因为让真实数据库解析查询是测试的一部分。
查询应该以SELECT * FROM EntAsdfDb007..Data_Table
的形式创建,但如果我们愿意,我们可以使用架构名称 ('db')。
根据我对 SqlServer 的 SELECT 格式的了解,它允许您指定数据库名称,后跟模式名称。此外,您可以删除数据库的名称并进行推断。
在 HyperSqlDb 中,我已经能够创建模式“db”并在其中创建必要的表,并且能够在该模式中创建表,但即使在设置数据库名称使用.setDatabaseName()
。我得到的例外是:
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: ENTASDFDB007
明确一点:我正在对一个使用 SQL 的类(如 SELECT * FROM EntAsdfDb007..Data_Table
)进行单元测试。我正在尝试设置 HyperSql 的实例以进行单元测试,但 HyperSql 似乎拒绝使用的语法。
【问题讨论】:
为什么不使用 SQL Server Express 或 SQL Server Developer Edition 进行单元测试? @Brandon 它必须是可以在JUnit 测试内 设置、托管和控制的东西,所以它基本上意味着它需要某种基于Java 的数据库。如果他们有帮助,我可以切换到 Apache Derby 或类似的东西,但原生应用或多或少是不可能的。 【参考方案1】:那是不可能的。
HyperSQL 不能更改为接受非标准命名方案。
【讨论】:
有没有办法让它接受SELECT * FROM EntAsdfDb007.db.Data_Table
呢?
我不这么认为。来自catalog.schema.table
的 SQL 标准。据我所知,HSQLDB 不支持目录,只支持模式。
“目录”谢谢!我需要一个名字,这将进一步帮助我。【参考方案2】:
这是可能的。 HSQLDB 确实每个数据库都有一个目录。目录名称默认为 PUBLIC,您可以更改。
ALTER CATALOG PUBLIC RENAME TO EntAsdfDb007
然后您可以使用
访问您的表SELECT * FROM EntAsdfDb007.db.Data_Table
【讨论】:
以上是关于HyperSQL中如何支持支持SqlServer的“..”?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Hypersql 数据库(HSQLDB)中选择多列但仅按一列分组?
如何在 Hypersql 数据库(HSQLDB)中设置 Rank 函数