我有一个包含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)
哪种方法更快更安全,因为我需要在最短的时间内完成更新,并避免表格锁定,因为它是我的数据库中的主要交易表。或者还有其他方法可以实现这一点吗?