【发布时间】:2018-04-18 06:30:43
【问题描述】:
我写的是我几天前问的this question。
适合我需要的答案是:
UPDATE ProcActivity SET IsActive = 1 WHERE ProcedureName = 'proc_name'
BEGIN TRANSACTION
EXEC proc_name
COMMIT TRANSACTION
UPDATE ProcActivity SET IsActive = 0 WHERE ProcedureName = 'proc_name'
现在这是另一个问题:
直觉上,我以为如果我将UPDATE 语句包装在BEGIN....COMMIT TRANSACTION 中,它会在到达COMMIT... 时立即生效,但我错了。实际上,当你按照上述方式进行操作时,当它到达BEGIN... 时,就会发生更新。
总结一下:
像这样进行更新:
UPDATE ProcActivity SET IsActive = 1 WHERE ProcedureName = 'proc_name'
BEGIN TRANSACTION
EXEC proc_name
COMMIT TRANSACTION
UPDATE ProcActivity SET IsActive = 0 WHERE ProcedureName = 'proc_name'
导致IsActive的值在过程proc_name执行期间被设置为1(更新在过程开始之前生效)。
像这样进行更新:
BEGIN TRANSACTION
UPDATE ProcActivity SET IsActive = 1 WHERE ProcedureName = 'proc_name'
COMMIT TRANSACTION
EXEC proc_name
UPDATE ProcActivity SET IsActive = 0 WHERE ProcedureName = 'proc_name'
在执行proc_name 期间将不起作用。 IsActive 的值在过程执行期间设置为 0。
为什么会这样?其背后的机制是什么?
【问题讨论】:
标签: sql sql-server sql-update commit