使用c#在SQL Server中插入/更新大量的行

本文关键字:更新 插入 SQL Server 使用 | 更新日期: 2023-09-27 18:08:00

我必须解析一个大XML文件,并将其数据导入(插入/更新)到具有外键约束的各种表中。

所以我的第一个想法是:我创建了一个SQL插入/更新语句列表,并通过使用SqlCommand.ExecuteNonQuery()一次性执行它们。

我发现的另一种方法是amiscsico: method我将一个接一个地执行sql命令。没有人抱怨,所以我认为这也是一个可行的做法。

然后我发现了关于SqlBulkCopy,但似乎我必须创建一个数据表与我想要上传的数据。每个表的SqlBulkCopy。为此,我可以创建一个DataSet。

我认为每个选项都支持SqlTransaction。每个表大约有100 - 20000条记录。

你更喜欢哪个选项,为什么?

使用c#在SQL Server中插入/更新大量的行

您说XML已经在数据库中了。首先,决定你是想用c#还是T-SQL来处理它。

    c#:你必须将所有数据来回发送一次,但是c#对于复杂逻辑来说是一种更好的语言。根据你所做的,它可以快几个数量级。
  1. T-SQL:不需要将数据复制到客户端,但必须使用T-SQL的功能和性能配置文件。

根据您的情况,其中一个可能比另一个快得多(不清楚是哪个)。

如果你想用c#计算,使用单个流SELECT来读取数据,使用单个SqlBulkCopy来写入数据。如果您的写操作不是只插入,则写入临时表并尽可能少地执行DML语句来更新目标表(可能是单个MERGE)。

如果你想继续使用T-SQL,尽量减少执行的语句数量。使用基于集合的逻辑

所有这些都被简化/缩短了。我省略了许多考虑因素,因为它们对于堆栈溢出的答案来说太长了。要知道,最好的策略取决于许多因素。您可以在评论中提出后续问题。

除非万有必要,否则不要在c#中这样做,这是一个巨大的开销,SQL本身可以做得更快更好

使用Insert INTO SELECT

从XML文件插入到表