加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2021-01-17 23:02:07 所属栏目:编程 来源:网络整理
导读:在我的应用措施中,我想执行查询,如SELECT * FROM tbl WHERE col IN(@list)个中,@ list可以有变量no值.我正在行使MS SQL处事器数据库.当我谷歌这个题目,然后我找到了这个链接 http://www.sommarskog.se/arrays-in-sql-2008.html 此链接暗示行使表值参数.以是我

在我的应用措施中,我想执行查询,如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”)处事器拆分成果,“稀有百万个).

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读