MS SQL 和 Java: 在调用存储过程期间找不到 table 变量

MS SQL and Java: cannot find table variable during call stored procedure

我正在尝试从 Java.

执行 MS-SQL 存储过程

其中一个过程参数是 table 变量(在本例中,它称为 [Items])。 该过程和 table 变量定义在 单独的模式 中(在本例中是 [test])。

在调用过程中,出现以下错误"com.microsoft.sqlserver.jdbc.SQLServerException: Column, parameter, or variable @P1. : Cannot find data type Items."。

我使用 Spring 的 SimpleJdbcCall 和微软的 jdbc 驱动程序 - sqljdbc-6.0 与 MS-SQL:

SimpleJdbcCall testCall = new SimpleJdbcCall(jdbcTemplate)
        .withSchemaName("[test]")
        .withProcedureName("[SomeTestProcedure]")
        .withoutProcedureColumnMetaDataAccess()
        .declareParameters(
                new SqlParameter("Id", Types.INTEGER),
                new SqlParameter("Items", microsoft.sql.Types.STRUCTURED));
testCall.compile();
SQLServerDataTable sdt;
try {
    sdt = new SQLServerDataTable();
    sdt.addColumnMetadata("Name", Types.NVARCHAR);
    sdt.addColumnMetadata("Value", Types.INTEGER);
    sdt.addRow("DEV", 1);
    sdt.addRow("PROD", 2);
} catch (SQLServerException e) {
    throw new IllegalStateException(e);
}
testCall.execute(1, sdt);

如果能帮助解决问题,我将不胜感激。谢谢

我发现,驱动程序尝试使用设置给用户的默认架构中的 table 变量。

在我的例子中,[dbo]-scheme 被设置为 default schema。 因此,[dbo]-方案 没有导致错误 "Cannot find data type Items" 的此 table 变量 [项目]。 在我们将用户的默认架构更改为 [test](其中创建了 table 变量)之后,错误消失了。