0

我正在使用HSQLDB并尝试运行包含NOLOCK在查询中的 select 语句。

执行语句时,BadSqlGrammarException会抛出 a。

有没有办法解决这个问题,因为该命令在 SQL Server 上运行得很好?

4

1 回答 1

0

a_horse_with_no_name他的评论是正确的:

HSQLDB 不支持 NOLOCK。如果您在语句中需要它,则需要针对真实事物运行测试(SQL Server)

为了澄清这一点,NOLOCK是一个 SQL Server 特定的关键字,它指定了数据库如何表现的提示。它甚至在 Stack Overflow 上也有自己的标签

可用于防止查询发出共享读锁的 SQL Server 表提示。虽然经常用于防止查询阻塞其他查询,但它也容易受到脏读和其他潜在数据问题的影响。

因此,包含此关键字的 SQL 查询对 HyperSQL 无效。

你可以做的是:

  • 针对 SQL Server 实例运行测试(如上面的注释所指出的)。
  • 重构您的 SQL 语句以不使用 SQL Server 的细节。在这种情况下,您必须确保他们不使用NOLOCK. 如果没有更多关于它的知识,就不可能说这将如何影响您的应用程序。

附带说明一下,HyperSQL完全支持 SQL 规范

HyperSQL 2.x 支持 SQL 标准 92、1999、2003、2008 和 2011 定义的 SQL 方言。

于 2017-05-24T08:55:00.690 回答