我有一个包含 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)在一个事务中构建更新语句并在并行循环中执行它们会更快,如下所示:
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)
哪种方法更快更安全,因为我需要在尽可能短的时间内完成更新,并且还要避免表锁定,因为它是我数据库中的主要事务表。或者还有其他方法可以实现吗?