【问题标题】:How to create a table-value parameter for text command如何为文本命令创建表值参数
【发布时间】:2011-05-19 11:57:16
【问题描述】:

我有一个生成的 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?

【问题讨论】:

    标签: .net sql-server-2008 table-valued-parameters


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,这就是我所走的路线,但经过一番折腾后,我发现它非常缓慢。起初我以为是动态创建类型的原因,但是所有的 TVP 调用都很慢。看起来,在引擎盖下,TVP 是使用insert into 语句每行!动态构建您自己的甚至使用 @ 987654323@。我认为 .Net 的 TVP 实现可能会被破坏,因为如果它使用一个 insert into, 分隔值集合,它会快得多。
    • 好信息,感谢您发布您的经验。你的问题引起了我的兴趣,我打算稍后再尝试一下,看看我是否可以让它发挥作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2014-04-03
    • 2013-09-26
    • 2020-09-06
    • 2015-01-18
    • 1970-01-01
    • 2016-10-19
    相关资源
    最近更新 更多