我必须解析一个大的XML文件,并将其数据导入(插入/更新)到具有外键约束的各种表中。
所以我的第一个想法是:我创建一个SQL插入/更新语句列表,并使用SqlCommand.ExecuteNonQuery()
一次性执行它们。
AMissico展示了我发现的另一种方法:Method 我将逐一执行sql命令。没有人抱怨,所以我认为这也是一种可行的做法。
然后我发现了SqlBulkCopy
,但似乎我必须使用我要上传的数据创建一个DataTable。所以,每个表SqlBulkCopy
。为此我可以创建一个DataSet。
我认为每个选项都支持SqlTransaction
。每张桌子大约有100到20000条记录。
您更喜欢哪个选项?为什么?
答案 0 :(得分:0)
答案 1 :(得分:0)
您说XML已经存在于数据库中。首先,决定是要在C#中还是在T-SQL中处理它。
根据您的情况,一个可能比另一个快得多(不清楚哪一个)。
如果要在C#中进行计算,请使用单个流SELECT
来读取数据,使用单个SqlBulkCopy来编写它。如果您的写入不是仅插入的,则写入临时表并执行尽可能少的DML语句来更新目标表(可能只有一个MERGE
)。
如果你想留在T-SQL中,最小化执行的语句数量。使用基于集合的逻辑。
所有这些都被简化/缩短。我遗漏了许多注意事项,因为它们对Stack Overflow的答案来说太长了。请注意,最佳策略取决于许多因素。您可以在评论中提出后续问题。