导致数据损坏的多个更新

时间:2017-10-11 15:03:49

标签: sql-server sql-server-2012

我有2个更新语句如下:我正在使用SQL Server 2012

DECLARE @Duetoday DATETIME = GETDATE()

UPDATE A
SET APPRL_DUE = CASE WHEN MTNG_DT_SCHD IS NOT NULL THEN DATEADD(D,25,MTNG_DT_SCHD) ELSE APPRL_DUE END   
FROM #1 A

UPDATE A
SET Days_Due = CASE WHEN DT_APPROVED IS NOT NULL THEN DATEDIFF(DAY,MTNG_DT_SCHD,DT_APPROVED) ELSE DATEDIFF(DAY,@Duetoday,APPRL_DUE) END
FROM #1 A

正如您所见,Days_Due基于Approval Due的值。对于Eg:在第一次更新之前曾经是10/22的记录的批准,在这种情况下,Days_Due将是11,现在假设在第一次更新之后批准到期是10/29但是Days Due仍然是11而不是18。

在dev和QA环境中,这不会导致问题,但我们的生产服务器设置了并行性,可能导致第二次更新在第一次更新之前或期间运行?

我知道我可以将更新语句合二为一。我需要知道的是如何在不组合更新语句的情况下处理这个问题,以及如何在dev或QA中测试它?

感谢。

0 个答案:

没有答案