gpt4 book ai didi

c# - 引用数据表 C# 更新 SQL 表的最佳方法

转载 作者:行者123 更新时间:2023-11-30 13:01:56 25 4
gpt4 key购买 nike

我有一个包含 Id 列的数据表。 Id 列与我的表 ID 列相匹配。我需要使用这个 ids 为我的 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)

哪种方法更快更安全,因为我需要在尽可能短的时间内完成更新,还要避免表被锁定,因为它是我数据库中的主要事务表。或者还有其他方法可以实现吗?

最佳答案

单个行的更新比选择的单个更新要慢。为此,我建议

  1. 在您的数据库中创建一个表,如下所示 TicketTable { TicketID, TargetID, SomePrecalculatedRes1, ..., SomePrecalculatedResN}
  2. 在 C# 中创建一个 DataTable 对象,其结构与来自以上
  3. 用您将用于更新的数据填写表格内容。 DataTable 的每一行都具有相同的 ticketId。 (并行处理可能会给您带来一些好处)
  4. 将 DataTable 内容批量插入 db.TicketTable(参见 SqlBulkCopy)
  5. 创建一个考虑到您的票证 ID 和更新的更新命令从您的票务表中选择您的目标表

关于c# - 引用数据表 C# 更新 SQL 表的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17043970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com