如何使用Microsoft SQL Server 2008 R2 JDBC驱动程序将表值参数(类似数组的参数)传递给Microsoft SQL Server 2008 R2中的存储过程? 是否有可能使用jTDS?
答案 0 :(得分:2)
当前(3.0)Microsoft驱动程序不支持传递TVP。
有一次,微软正在为TVP和Bulk Copy征求选票:
http://blogs.msdn.com/b/jdbcteam/archive/2011/09/22/tvp-or-bulk-copy.aspx
TVP获得了更多选票,但仍有待观察实际完成的工作。版本4.0的最新CTP似乎没有TVP支持。答案 1 :(得分:1)
虽然这个问题是关于SQL Server 2008的,虽然它当时无法传递表值参数,但现在是。这在JDBC driver manual中记录。例如,可以这样做:
SQLServerDataTable table = new SQLServerDataTable();
table.addColumnMetadata("i" ,java.sql.Types.INTEGER);
table.addRow(1);
table.addRow(2);
table.addRow(3);
table.addRow(4);
try (SQLServerPreparedStatement stmt=
(SQLServerPreparedStatement) connection.prepareStatement(
"SELECT * FROM some_table_valued_function(?)")) {
// Magic here:
stmt.setStructured(1, "dbo.numbers", table);
try (ResultSet rs = stmt.executeQuery()) {
...
}
}
答案 2 :(得分:0)
我自己解决了这个问题。我创建了CLR .Net Stored Proc并接受了BLOB参数。这个BLOB只是序列化INT的列表。可以使用T-SQL或.Net CLR SP对其进行反序列化。 .Net CLR SP具有更好的性能,这对我的项目非常重要。