【发布时间】:2013-06-07 07:04:15
【问题描述】:
我有一个包含 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)
哪种方法更快更安全,因为我需要在尽可能短的时间内完成更新,并且还要避免表锁定,因为它是我数据库中的主要事务表。或者还有其他方法可以实现吗?
【问题讨论】:
-
我会在临时表中导入数据表,然后只在 SQL 中进行更新。我不知道你是否可以根据你的情况这样做。
-
如果我使用临时表,并使用 In 语句会更快并减少锁吗?
-
您可以将多线程位委托给 SQL,当然所有数据都在 SQL Server 的内存中,所以,是的,速度更快,而且没有死锁。
标签: c# .net sql sql-server