4
我有一个生成的SQL查询块,它将一个表值参数作为输入。如何为文本命令创建表值参数
我有一个DataTable data
输入参数,则:
// add the table-value parameter
var tvp = com.Parameters.AddWithValue("data", data);
tvp.SqlDbType = SqlDbType.Structured;
tvp.TypeName = "???";
com.ExecuteNonQuery();
的问题是,如果该命令不是一个存储过程然后到被宣布为TypeName
需求。
参数data
中的列的数量和类型可能会有很大差异,所以我没有可以使用的SQL类型。
有没有什么方法可以用这种方式使用TVP?
是的,这是我走下的路线,但经过很多混乱之后,我发现它很慢。起初我认为这是由于动态创建类型,但所有TVP调用都很慢。它看起来就像在引擎盖下,TVP是用每行的'insert into'语句*构建的*。它更快速地(我们正在说几秒到几毫秒)动态构建自己的,甚至使用'SqlBulkCopy'。我认为.Net的TVP实现可能会被破坏,因为如果它使用''insert'来分隔值集合,那么它会更快。 – Keith 2011-05-19 22:24:16
良好的信息,感谢张贴您的经验。你的问题引起了我的兴趣,而当我有机会看看我能否实现它时,我会试试它。 – RThomas 2011-05-19 23:47:18