MS SQL 和 Java:在调用存储过程期间找不到表变量
Posted
技术标签:
【中文标题】MS SQL 和 Java:在调用存储过程期间找不到表变量【英文标题】:MS SQL and Java: cannot find table variable during call stored procedure 【发布时间】:2016-11-09 08:18:32 【问题描述】:我正在尝试从 Java 执行 MS-SQL 存储过程。
其中一个过程参数是一个表变量(在这种情况下,它被称为 [Items])。 在单独的模式中定义的过程和表变量(在本例中为 [test])。
在调用过程中,出现以下错误“com.microsoft.sqlserver.jdbc.SQLServerException: Column, parameter, or variable @P1. : Cannot find data type Items.”。
我使用 Spring 的 SimpleJdbcCall 和 Microsoft 的 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);
如果能帮助我解决问题,我将不胜感激。谢谢。
【问题讨论】:
【参考方案1】:我发现,驱动程序尝试使用设置给用户的默认模式中的表变量。
在我的例子中,[dbo]-scheme 被设置为 default 模式。 因此,[dbo]-scheme 没有此表变量 [Items],导致错误“找不到数据类型项目”。 在我们将用户的默认模式更改为 [test](其中创建了表变量)后,错误消失了。
【讨论】:
以上是关于MS SQL 和 Java:在调用存储过程期间找不到表变量的主要内容,如果未能解决你的问题,请参考以下文章
从 MS SQL SERVER 和 MS ACCESS 调用存储过程的结果之间的差异
MS SQL Server 2005 - 存储过程“自发中断”