【问题标题】:JDBC call to a synonym to Microsoft SQL Server stored procedureJDBC 调用 Microsoft SQL Server 存储过程的同义词
【发布时间】:2012-02-14 18:25:54
【问题描述】:

使用 Microsoft 提供的 JDBC 驱动程序 (sqljdbc4.jar) 我无法使用为其定义的同义词调用存储过程。 IE。对于定义为的同义词:

CREATE SYNONYM dbo.synonym_name for dbo.procedure_name

运行由以下人员创建的可调用语句时:

CallableStatement callStmt = conn.prepareCall("{ call [dbo].[synonym_name] (?,?,?,?,?,?) }");

我得到一个例外:

Exception in thread "main" com.microsoft.sqlserver.jdbc.SQLServerException: Parameter param_name was not defined for stored procedure [dbo].[synonym_name].
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
    at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.findColumn(SQLServerCallableStatement.java:1217)
    at com.microsoft.sqlserver.jdbc.SQLServerCallableStatement.setString(SQLServerCallableStatement.java:1563)
    at testmssql.main(testmssql.java:53)

即使参数设置正确(如果我直接调用过程(绕过同义词)一切正常)。

此外,如果我用 JTDS 替换 Microsoft 的驱动程序,一切正常。

如何通过 Microsoft SQL Server 的 JDBC 驱动程序使用存储过程的同义词运行 CallableStatement

【问题讨论】:

  • 我看到有问题,但问题是什么?
  • @Paul Sasik - 我添加了一个问题 - 这可能很难阅读,但我无法更好地表达它。
  • +1 听起来不错。我认为这是您正在寻找的解决方案,但您的 OP 有几条路径。顺便说一句,为什么 JTDS 不是一个好的解决方案?并且您必须有存储过程的同义词吗?
  • @Paul Sasik - JTDS 或不使用同义词都是有效的选项,但我正在调查为什么我们会遇到 MS 驱动程序异常。 AFAIK 同义词用于将现有存储过程桥接到我们项目的命名空间。

标签: java sql-server jdbc


【解决方案1】:

SQL Server 同义词没有可查询的元数据。从错误来看,JDBC 正在尝试确认 Java 代码中声明的参数与存储过程中声明的参数是否匹配。由于缺少元数据而失败。

解决此问题的唯一方法是创建直通存储过程而不是同义词。 所以如果你有这个程序:

CREATE PROCEDURE dbo.RealProcedure
@p1 INT,
@p2 INT
AS
BEGIN
  RAISERROR('TODO: implement me',16,10);
END

你有这个同义词:

CREATE SYNONYM dbo.myProcedure FOR dbo.realProcedure;

删除同义词并改为创建此过程:

CREATE PROCEDURE dbo.myProcedure
@p1 INT,
@p2 INT
AS
BEGIN
  EXEC dbo.realProcedure @p1,@p2;
END

这里描述了一个类似的问题:http://social.msdn.microsoft.com/Forums/en-us/sqldataaccess/thread/dcdfee17-a926-4b57-8641-ed86fec989f2

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2019-05-04
    • 2011-03-12
    • 1970-01-01
    • 2015-05-28
    • 2011-01-09
    相关资源
    最近更新 更多