lak*_*man 2 sql-server-2008 sql-server jdbc
我在 SQL Server 2008 中使用 jtds 1.2.2 驱动程序。下面是我尝试执行的查询
SELECT * from AM_API FETCH NEXT 10 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
无论如何,在执行上述查询后,我得到以下错误
Caused by: java.sql.SQLException: Invalid usage of the option NEXT in the FETCH statement.
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2816)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2254)
at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:631)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:477)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:777)
at org.jaggeryjs.hostobjects.db.DatabaseHostObject.executeQuery(DatabaseHostObject.java:510)
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
更新
我读过这篇文章,说 FETCH 仅适用于 SQL Server 2012 以上。那么如何在SQL server 2008 中限制结果。要执行的查询不在我的控制之下。我只是后缀FETCH NEXT 10 ROWS ONLY到查询以限制结果。那么有没有办法通过添加限制查询作为查询的后缀来限制结果。
升级到 SQL Server 2012 会有所帮助,但您仍会遇到相同的错误。从文档:
使用 OFFSET-FETCH 的限制:
- ORDER BY 必须使用 OFFSET 和 FETCH 子句。
- FETCH 必须使用 OFFSET 子句。您永远不能使用 ORDER BY ... FETCH。
要从表中返回不确定的 10 行,您可以在 SQL Server 2012 中执行此操作:
SELECT *
FROM AM_API
ORDER BY (SELECT NULL) OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)
如果您无法升级,您还有一些额外的选择。SET ROWCOUNT不推荐用于SELECT语句,因此以下内容应该适用于 SQL Server 2008:
SET ROWCOUNT 10;
SELECT *
FROM AM_API;
SET ROWCOUNT 0;
Run Code Online (Sandbox Code Playgroud)
您还可以使用 TOP 表达式:
SELECT TOP 10 *
FROM AM_API;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17354 次 |
| 最近记录: |