【发布时间】:2013-11-07 12:44:36
【问题描述】:
我需要更新我的一个表的几行作为原子操作。
更新涉及增加某些行的 int 列中的一些值。我需要将几行中的值作为单个操作递增。
最好的方法是什么?
为我回答这个问题归结为回答以下两个:
- 如果我使用LINQ to SQL,如何实现增量的原子性 操作(我是使用事务,还是有更好的方法)?
- 存储过程是否以原子方式执行(如果我在 DB 上调用该过程)?
我正在使用 SQL Server 使用 C#。
【问题讨论】:
-
单个 UPDATE 语句所做的任何更改都是原子的,即使它们影响多行。您可以编写 WHERE 子句以将更新限制为仅要更新的行。编写单个 UPDATE 语句有问题吗?您如何选择要更新的记录?
-
我在其中一个表中存储了一个树结构,我需要进行从节点到树根的链式更新。我有一列通过 RowID 引用同一个表(我知道这不是树的最佳结构,但这现在并不重要)。我可以执行一次更新,我知道这是原子的,但我的问题是最好的方法是什么(以及如何使用 LINQ to SQL 进行原子增量)。
-
@PanagiotisKanavos 如果他正在执行多个更新语句怎么办??
-
如果您进行更改并拨打
SubmitChanges电话,所有事情都发生在一个事务中。还是我错过了你的意思? -
是的,但是如果你增加一个值然后提交它不会作为增量提交,而是作为新值提交,这意味着它不会提供增量操作的原子性。
标签: c# sql-server stored-procedures linq-to-sql concurrency