在我的应用程序中,我想执行SELECT * FROM tbl WHERE col IN (@list)之类的查询,其中@list 可以有可变的值。我正在使用 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);
但是如何在表值参数情况下调用存储过程?