MS SQL 异常:“@P0”附近的语法不正确

2022-08-31 16:02:41

我正在使用MS SQL查询数据库,并且由于某种原因,我收到以下错误:即使此“P0”在我的语法中不在任何位置...com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'

我读过有人遇到了同样的问题,但他们使用的是存储的proc,我没有使用,所以我不明白他的解决方案将如何为我工作。(他的解决方案是关于在过程调用周围添加大括号{}。

无论如何,下面我已经粘贴了相关代码。真的希望有人能帮助我,变得非常沮丧。

PreparedStatement stmt = null;
Connection conn = null;    

String sqlQuery = "SELECT TOP ? \n"+
                              "z.bankAccountNo, \n"+
                              "z.statementNo, \n"+
                              "z.transactionDate, \n"+
                              "z.description, \n"+
                              "z.amount, \n"+
                              "z.guid \n"+
                              "FROM \n"+
                              "( \n"+
                              "select  \n"+
                              "ROW_NUMBER() OVER (ORDER BY x.transactionDate, x.statementNo) AS RowNumber, \n"+
                              "x.transactionDate, \n"+
                              "x.statementNo, \n"+
                              "x.description, \n"+
                              "x.amount, \n"+
                              "x.bankAccountNo, \n"+
                              "x.guid \n"+
                              "FROM \n"+
                              "( \n"+
                              "SELECT  \n"+
                              "a.bankAccountNo,  \n"+
                              "a.statementNo,  \n"+
                              "a.transactionDate, \n"+
                              "a.description,  \n"+
                              "a.amount,  \n"+
                              "a.guid  \n"+
                              "FROM BankTransactions as a  \n"+
                              "LEFT OUTER JOIN BankTransactionCategories as b  \n"+
                              "ON a.category = b.categoryCode  \n"+
                              "WHERE b.categoryCode is null \n"+
                              ") as x \n"+
                              ") as z \n"+
                              "WHERE (z.RowNumber >= ?)";

stmt = conn.prepareStatement(sqlQuery);
stmt.setInt(1, RowCountToDisplay);
stmt.setInt(2, StartIndex);
ResultSet rs = null;
try{
    rs = stmt.executeQuery();
} catch (Exception Error){
    System.out.println("Error: "+Error);
}

提前致谢!


答案 1

SQL Server 要求您在参数两边加上括号,以防传入变量:top

SELECT TOP (?)

答案 2

在我们的应用程序中,我们扩展了一个 depraceted .改改后问题消失了。SQLServerDialectSQLServer2008Dialect


推荐