나는 이틀 전에 this question 내 질문에 관해서 글을 쓰고있다.BEGIN - COMMIT TRANSACTION 예기치 않은 비 직관적 인 행동
내 요구에 맞게 대답은이었다 : 나는 COMMIT...
에 도달대로 즉시 적용 할 BEGIN....COMMIT TRANSACTION
에 UPDATE
문을 포장하면 생각, 직관적으로
:
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'
지금 여기 또 다른 qustion입니다 ,하지만 나는 틀렸다. 실제로 위에서 언급 한 것처럼 수행하면 BEGIN...
에 도달하면 업데이트가 수행됩니다.
요약하면 :
같은 업데이 트를 수행 :의 IsActive
의 값이 (절차가 시작되기 전에 업데이트가 발효) 절차 proc_name
실행 중 하나로 설정되어
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'
cuases합니다. 이 같은
수행 갱신 :
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 Server에서이 코드를 시도 할 수 있습니다. 내 작업 환경에서도 마찬가지입니다. 너의 것과 같지 않으면 SP 바디를 먼저 보여줄 수있다. – gotqn