【发布时间】:2016-12-23 17:20:32
【问题描述】:
我需要将 .NET 集合传递给存储过程。我的收藏包含 1000 条记录。每条记录包含2-3个其他类型的子对象。
我只需要通过从 .NET 调用存储过程来一次插入它们。
我已经尝试过 TVP(表值参数),但这根本无法满足我的需求。
对于每个根级记录,我需要通过传递根记录及其对应的子记录来调用存储过程。这使得整个过程非常缓慢。
这就是为什么我正在寻找一种方法,以便我可以一次传递整个层次结构列表,并且在存储过程中,通过循环和迭代子记录,我可以插入父子记录。
我怎样才能做到这一点?
【问题讨论】:
-
尝试使用 XML 并将其解压到存储过程中的临时表中。它对我来说工作得很快。
-
表值参数是一个很好的方法。只需传递 2 个表,一个用于父级,另一个用于子级,并使用一些键来关联它们。
-
@Alejandro :目前,我以几乎相同的方式通过。而是将整个父级作为一张表传递,将整个子级作为另一张表传递,我正在传递一个父级记录及其对应的子级列表。但这真的很慢,因为我需要插入 100K 父记录。此外,对于每个单亲父母,都有 3-4 个孩子与之关联。
-
这可能是问题的根源。尝试一次完成所有这些,而不是一个接一个。我想大部分开销来自重复的网络往返而不是查询本身。
-
是的,这就是我所知道的。所以,解决方案是一次传递整个层次结构,然后让 SQL 在内部完成。所以问题归结为:如何一次传递整个层次结构(例如 List
consignments,其中每个 consignment 包含 List )
标签: c# sql-server stored-procedures bulkinsert table-valued-parameters