【发布时间】:2017-10-23 10:16:10
【问题描述】:
我正在使用 HSQLDB 并尝试运行查询中包含 NOLOCK 的 select 语句。
执行语句时,会抛出BadSqlGrammarException。
有没有办法解决这个问题,因为该命令在 SQL Server 上运行得非常好?
【问题讨论】:
-
HSQLDB 不支持 NOLOCK。如果您在查询中需要它,则需要针对真实事物(SQL Server)运行测试
我正在使用 HSQLDB 并尝试运行查询中包含 NOLOCK 的 select 语句。
执行语句时,会抛出BadSqlGrammarException。
有没有办法解决这个问题,因为该命令在 SQL Server 上运行得非常好?
【问题讨论】:
a_horse_with_no_name 他的评论是正确的:
HSQLDB 不支持 NOLOCK。如果您在语句中需要它,则需要针对真实事物(SQL Server)运行测试
为了澄清这一点,NOLOCK 是一个特定于 SQL Server 的关键字,它指定了数据库行为方式的提示。它甚至在 Stack Overflow 上有自己的标签 nolock:
可用于防止查询发出共享读锁的 SQL Server 表提示。虽然经常用于防止查询阻塞其他查询,但它也容易受到脏读和其他潜在数据问题的影响。
因此,包含该关键字的 SQL 查询对 HyperSQL 无效。
你可以做的是:
NOLOCK。如果没有更多相关知识,就无法说出这将如何影响您的应用程序。附带说明,HyperSQL fully supports the SQL specification:
HyperSQL 2.x 支持 SQL 标准 92、1999、2003、2008 和 2011 定义的 SQL 方言。
【讨论】: