sql – 使用java中的表值参数调用存储过程

前端之家收集整理的这篇文章主要介绍了sql – 使用java中的表值参数调用存储过程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的应用程序中,我想执行查询,如SELECT * FROM tbl WHERE col IN(@list)其中,@ list可以有变量no值.我正在使用MS sql服务器数据库.当我谷歌这个问题,然后我找到了这个链接

http://www.sommarskog.se/arrays-in-sql-2008.html

链接表示使用表值参数.所以我使用Microsoft sql Server Management Studio创建了用户定义的数据类型.

CREATE TYPE integer_list_tbltype AS TABLE(n int NOT NULL PRIMARY KEY)

然后我写了存储过程

CREATE PROCEDURE get_product_names @prodids integer_list_tbltype READONLY AS
   SELECT p.ProductID,p.ProductName
   FROM   Northwind.dbo.Products p
   WHERE  p.ProductID IN (SELECT n FROM @prodids)

然后只使用管理工作室我执行了这个程序

DECLARE @mylist integer_list_tbltype
INSERT @mylist(n) VALUES(9),(12),(27),(37)
EXEC get_product_names @mylist

它给了我正确的输出.但我想知道如何从java源代码调用此存储过程.我知道如何使用常量参数调用简单的存储过程

CallableStatement proc_stmt = null;
proc_stmt = con.prepareCall("{call test(?)}");
proc_stmt.setString(1,someValue);

但如何在表值参数的情况下调用存储过程?

解决方法

看起来这是JDBC的计划添加但尚未实现:

http://blogs.msdn.com/b/jdbcteam/archive/2012/04/03/how-would-you-use-table-valued-parameters-tvp.aspx

将参数作为分隔字符串(“9,12,27,37”)传递,然后在sql Server中创建一个名为“fnSplit”的表值函数或任何将返回表中的整数值的函数(只需搜索sql”)服务器拆分功能,“有数百万个).

原文链接:https://www.f2er.com/mssql/83586.html

猜你在找的MsSQL相关文章