SQL-Server Update - 实现增量值

时间:2015-11-25 13:19:34

标签: sql sql-server sql-update

我有一个表(称为textarea),其中包含两列:mytableID

我想实现一个增量计数器来更新counter值。每次增加1。

基本上,它应该像这样运行:

counter

我编写了一个小应用程序,运行1到10,000的for循环,并检查我的计数器最后是否等于10,000。

使用单线程应用程序,它运行正常。但是,当我运行我的应用程序的几个实例时,UPDATE mytable SET [counter] = [counter] + 1 WHERE ID = @theID 值小于预期。

例如,运行应用程序3次,最后counter的值为29,980(预期为30,000)。

我知道这是一个并发问题。所以,我检查过,似乎SQL counter语句是“原子”命令。所以,我猜这个命令不能同时发生两次。

这是真的吗?那么,我如何在UPDATE列中丢失一些值?

如果没有,还有什么问题可以解决?

2 个答案:

答案 0 :(得分:0)

我很好奇为什么会发生这种情况......但是如果你担心同一个计数器已被读过两次,你可以尝试锁定表格。

 BEGIN TRANSACTION
     DECLARE @Counter INT; 

     SELECT @Counter = [Counter]
     FROM   mytable WITH ( TABLOCK, HOLDLOCK )

     UPDATE mytable
     SET    Counter = @Counter + 1;

 COMMIT TRANSACTION

答案 1 :(得分:-1)

您可以更新代码以使用@@ ROWCOUNT。

检查它是否正常工作:

  UPDATE mytable
  SET [counter] = (Select @@ROWCOUNT From mytable where ID=@theID) + 1
  WHERE ID=@theID