嵌套异常是 com.microsoft.sqlserver.jdbc.SQLServerException:输出参数的索



我正在尝试从弹簧批处理项目读取器在MSSQL中执行一个过程。我在下面得到例外。我能够从任何sql客户端执行相同的过程。该过程有 2 个输出参数。任何帮助都深表感谢。

这是代码,

StoredProcedureItemReader<ReturnData> reader = new StoredProcedureItemReader<ReturnData>();
        try {
            reader.setDataSource(batchOMSDataSource);
            reader.setProcedureName("dbo.ItemReturnEligibilty_r");
            reader.setParameters(
                    new SqlParameter[] {
                        //new SqlParameter("WarehouseNumber", java.sql.Types.INTEGER),
                        new SqlParameter("ItemNumber", java.sql.Types.VARCHAR),
                        new SqlParameter("IsEligibleForReturn", java.sql.Types.VARCHAR),
                    });
            reader.setPreparedStatementSetter(
                    new PreparedStatementSetter() {
                        public void setValues(PreparedStatement ps)
                                throws SQLException {
                            //ps.setInt(0, 847);
                            ps.setString(1, "ItemNumber");
                            ps.setString(2, "IsEligibleForReturn");
                        }
                    });

下面的例外,

Caused by: org.springframework.dao.TransientDataAccessResourceException: Executing stored procedure; SQL [{call dbo.ItemReturnEligibilty_r(?, ?)}]; The index 0 of the output parameter is not valid.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: The index 0 of the output parameter is not valid.
    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:108)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
    at org.springframework.batch.item.database.StoredProcedureItemReader.openCursor(StoredProcedureItemReader.java:226)
    at org.springframework.batch.item.database.AbstractCursorItemReader.doOpen(AbstractCursorItemReader.java:406)
    at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.open(AbstractItemCountingItemStreamItemReader.java:144)

在开始语句之前在存储过程中使用"set nocount on"。 谢谢

最新更新