我需要将我的一个表的几行更新为原子操作。
更新涉及增加某些行的int列中的某些值。我需要将多行中的值增加为单个操作。
最好的方法是什么?
回答这个问题归结为回答以下两个问题:
我正在使用SQL Server进行C#。
答案 0 :(得分:0)
在SQL Server中,使用Explicit Transactions
实现不同操作之间的原子性,其中用户使用关键字BEGIN TRANSACTION
显式启动事务,并且一旦完成所有操作而没有任何错误,您可以提交通过使用关键字COMMIT TRANSACTION
进行交易,如果出现错误/异常,您可以使用关键字ROLLBACK TRANSACTION
来撤消正在进行的交易中的任何工作
提前编写战略
SQL服务器使用Write Ahead Strategy
来确保事务的原子性和数据的持久性,当我们对数据进行任何更改/更新时,SQL Server采取以下步骤
如果您决定ROLLBACK事务,那么在所有这些步骤的过程中的任何地方。您的磁盘上的实际数据保持不变
我的建议
BEGIN TRY
BEGIN TRANSACTION
------ Your Code Here ------
---- IF everything Goes fine (No errors/No Exceptions)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION --< this will ROLLBACK any half done operations
-- Your Code here ---------
END CATCH
答案 1 :(得分:-1)
我找到了答案:直接通过LINQ to SQL无法实现增量。但是,可以从LINQ调用存储过程,并且可以在那里实现增量。
我的解决方案是创建一个存储过程,该过程将在事务中的单个while循环中执行必要的更新。这样,所有更新都作为单个原子操作执行。
UPDATE语句本身就是原子的。