使用C#将大量行插入/更新到SQL Server

时间:2014-06-11 08:31:43

标签: c# sql sql-server

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

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

AMissico展示了我发现的另一种方法:Method 我将逐一执行sql命令。没有人抱怨,所以我认为这也是一种可行的做法。

然后我发现了SqlBulkCopy,但似乎我必须使用我要上传的数据创建一个DataTable。所以,每个表SqlBulkCopy。为此我可以创建一个DataSet。

我认为每个选项都支持SqlTransaction。每张桌子大约有100到20000条记录。

您更喜欢哪个选项?为什么?

2 个答案:

答案 0 :(得分:0)

除非你必须这样做,否则不要用C#做它,这是一个巨大的开销,SQL可以自己做得更快更好
Insert to table from XML file using INSERT INTO SELECT

答案 1 :(得分:0)

您说XML已经存在于数据库中。首先,决定是要在C#中还是在T-SQL中处理它。

  1. C#:你必须来回发送一次所有数据,但C#是复杂逻辑的一种更好的语言。根据你的工作,它可以快几个数量级。
  2. T-SQL:无需将数据复制到客户端,但您必须使用T-SQL的功能和性能配置文件。
  3. 根据您的情况,一个可能比另一个快得多(不清楚哪一个)。

    如果要在C#中进行计算,请使用单个流SELECT来读取数据,使用单个SqlBulkCopy来编写它。如果您的写入不是仅插入的,则写入临时表并执行尽可能少的DML语句来更新目标表(可能只有一个MERGE)。

    如果你想留在T-SQL中,最小化执行的语句数量。使用基于集合的逻辑。

    所有这些都被简化/缩短。我遗漏了许多注意事项,因为它们对Stack Overflow的答案来说太长了。请注意,最佳策略取决于许多因素。您可以在评论中提出后续问题。

相关问题