给定一个简单的存储过程,该存储过程具有一个以整数列作为参数的表:
CREATE PROCEDURE [dbo].[table_sel] @tbl INT32Table READONLY AS BEGIN SET NOCOUNT ON; SELECT value FROM @tbl END
如何从Java执行此存储过程?从C#,这就是我想要的:
SqlConnection sqlconn; System.Data.DataTable tbl = new System.Data.DataTable("INT32Table", "dbo"); tbl.Columns.Add("value", typeof(int)); tbl.Rows.Add(2); tbl.Rows.Add(3); tbl.Rows.Add(5); tbl.Rows.Add(7); tbl.Rows.Add(11); using (SqlCommand command = new SqlCommand("table_sel")) { command.Connection = sqlconn; command.Parameters.AddWithValue("@tbl", tbl); command.CommandType = System.Data.CommandType.StoredProcedure; SqlDataReader reader = command.ExecuteReader(); //do stuff }
您不能使用JDBC传递TVP。正如他们两年前提到的那样,Microsoft JDBC团队仍在为此进行工作。参考链接:
you-use-table-valued-parameters-tvp.aspx) : //blogs.msdn.com/b/jdbcteam/archive/2012/04/03/how-would-you-use-table- valued-parameters- tvp.aspx
通过在过程主体中传递XML参数和OPENXML()来尝试一些替代解决方案,而不是使用TVP。