同时更新SQL表

时间:2014-01-15 13:32:54

标签: sql sql-server stored-procedures locking sql-update

我需要根据表中的值更新表。整个表格将被更新,我想确保SQL-Server将为我处理锁定。我知道我可以使用WITH(LOCKTYPE)。但是我的更新将是:

SELECT MyTable.ID, MyTable.Cost 
INTO #tempTable from MyTable

-- More complex calculations here

UPDATE MyTable
SET MyTable.Cost = #tempTable.Cost+1
FROM #tempTable
WHERE MyTable.ID = #TempTable.ID

我想确保我可以锁定整个表,以便如果另一个请求进入更新表,则必须等待,但理想情况下,如果有读取请求,则会对其进行处理。这可能吗?

修改

过程:

  1. 从表X中读取
  2. 执行计算
  3. 写入临时表Y
  4. X和Y之间的平均值
  5. 回写X
  6. 在SP中,一旦发生第1步,我不希望处理对SP的任何其他调用,我希望它们坐在队列中。因为每次更新都取决于表中已有的值,所以我不能允许对SP的另一次调用从表中读取。

    通常,SP需要串行运行,不应允许SP同时运行两次。我不介意调用是否通过,SELECT是否排队,但一旦选择发生,另一个选择(在SP内)不允许在另一个线程中发生。

1 个答案:

答案 0 :(得分:0)