我有一个包含Id列的数据表。 Id列与我的表ID列匹配。我需要使用此ID为我的sql表设置单个值。但数据表结构与我的表结构不同,即
Data Table Sql Table
____________ _______________________________________________
ID ID | col 1 | col2 | col3 | col4 |final value
1 1 | a | b |c |d |N
2 2 | x | y |z |a |N
在任何给定时间的数据表将具有超过 500,000 条目。
我的问题是:
1)如何在一个事务中的并行循环中构建Update语句并执行它们会更快,如下所示:
Sqltrn = Sqlconn.BeginTransaction();
Parallel.For (0; Datatable.Rows.Count; i =>
{
SqlCmd.CommandText = BuildStatemet;
SqlCmd.ExecuteNonQuery();
});
SqlTrn.Commit();
以上方法会导致我的桌子死锁吗?
或
2)通过从dt表构建一个联系的字符串来执行单个语句:
Update MyTable set FinalValue = 'Y' WHERE ID in (CreateConcactedStringHere)
哪种方法更快更安全,因为我需要在尽可能短的时间内完成更新,并避免表锁定,因为它是我数据库中的主要事务表。或者还有其他方法可以达到这个目的吗?
答案 0 :(得分:0)
单个行更新速度较慢,而不是来自select的单个更新。 为此,我会建议
SqlBulkCopy
)