当前位置: 首页 > 知识库问答 >
问题:

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

司允晨
2023-03-14

我试图执行MS-SQL存储过程从Java。

其中一个过程参数是一个表变量(在本例中,它被称为[项目])。在单独的模式中定义的过程和表变量(在本例中为[测试])。

在调用过程期间,会发生以下错误"com.microsoft.sqlserver.jdbc.SQLServerException:列、参数或变量@P1.:找不到数据类型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);

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

共有1个答案

郭永安
2023-03-14

正如我所发现的,驱动程序尝试使用设置为用户的默认模式中的表变量。

在我的例子中,[dbo]-方案被设置为默认模式。因此,[dbo]-方案没有此表变量[Items],这导致了错误“找不到数据类型Items”。在我们将用户的默认模式更改为[test](其中创建了表变量)后,错误消失了。

 类似资料:
  • 尝试调用MSSQL存储过程。过程基本上是这样的:使用[DATABASE]GO SET ANSI _ NULLS ON GO SET QUOTED _ IDENTIFIER ON GO 更改过程。[stored procedure](@ username varchar(10))as 从表名中选择用户名 输出是:array(0) { }这个数据库中有大量的数据。 我知道与数据库的连接是有效的,但当我

  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 问题内容: 我应该做的是创建一个Java存储过程,然后再从Java程序中调用它。 我在执行JAVA程序时遇到问题-带有1个参数的JDBCPiemers(如下)(我需要弄清楚String Nosaukums)。错误:“无效的列名”。 调用ORACLE中的过程可以正常工作。 这是我已存储在数据库中的存储过程。 我用oracle创建了以下程序包。 这是我在其中调用该过程的Java程序。但是我无法使它工作

  • 本文向大家介绍MSSQL事务的存储过程,包括了MSSQL事务的存储过程的使用技巧和注意事项,需要的朋友参考一下 在酒店管理系统开发中,我们会创建房间表和房间类型表(房型表)这两个表,如下图所示: 房型表:RoomType             房间表:Room   首先这两个表的关系:Room是从表,RoomType是主表,两表有主外键关系,RoomType.rTypeId=Room.rType

  • com.microsoft.sqlserver.jdbc.sqlserverexception:操作数类型冲突:nvarchar与com.microsoft.sqlserver.jdbc.sqlserverexception.makefromdatabaseerror(sqlserverexception.java:196)com.microsoft.sqlserver.jdbc.sqlserve

  • 我在Mysql中创建了一个存储过程,并尝试使用J2EE/Hibernate调用该存储过程。在执行存储过程时,其显示me错误。 2018年03月04日上午12:06:18 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions错误:找不到列“ID”。 执行SP:org.hibernate.exception.sqlgrammare