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?

4

1 回答 1

3

您必须在服务器端定义 TypeName 才能传递表值参数。因此,如果不存在,则不存在……您不能以这种方式使用表值参数。在此处阅读有关限制和要求的更多信息:

http://msdn.microsoft.com/en-us/library/bb675163.aspx

我从未尝试过,但不应该有任何理由不能在此代码块之前根据数据表的结构生成 create TypeName 语句。您可以选择任何您想要的名称,然后在完成后将其删除。

根据数据表的结构构建 create typename 语句需要一些编码,但可行。

于 2011-05-19T17:21:55.763 回答