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:在存储过程中删除表

如何在 Hypersql 数据库(HSQLDB)中选择多列但仅按一列分组?

如何在 Hypersql 数据库(HSQLDB)中设置 Rank 函数

HSQLDB (HyperSQL) - 如何以毫秒精度将 UNIX 时间戳作为数字获取

HyperSQL - 意外令牌开启

HyperSQL (HSQLDB) 显式共享(读取)锁语法