DECLARE @cnt_inv int,
@cnt_jrn int,
@pl_per varchar(2),
@pl_yr varchar(4),
@pl_jrn varchar (6),
@pl_inv varchar (6)
IF @@ERROR <> 0
BEGIN
BEGIN TRANSACTION JD_Imp
IF @cnt_inv > 0
BEGIN
BEGIN TRANSACTION JD_Inv
COMMIT TRANSACTION JD_Inv;
PRINT N'The Invoice Commits DONE.';
END
IF @cnt_jrn > 0
BEGIN
BEGIN TRANSACTION JD_Jrn
COMMIT TRANSACTION JD_Jrn;
PRINT N'The Journals Commits DONE.';
END
COMMIT TRANSACTION JD_Imp;
END
답변
을 BEGIN 없습니다 대응하고있다 COMMIT :
IF @cnt_jrn > 0
BEGIN TRANSACTION JD_Jrn
이 모든은 새 트랜잭션의 경우 시작된다 할 것입니다 @cnt_jrn > 0
. 조건에 관계없이 아래 코드를 모두 실행하려고합니다. 따라서 @cnt_jrn <= 0
인 경우 commit transaction JD_Jrn
을 호출하지 않고 전화 할 것입니다.
당신은 begin
및 end
와 어떤 다중 문 if
몸의 몸을 묶어야합니다. 예를 들면 :
IF @cnt_jrn > 0
BEGIN
BEGIN TRANSACTION JD_Jrn
... code ...
END
하지만 당신은 필요하지 않다 거래에서 단일 insert
및 update
문을 둘러싸고있다. SQL 연산은 원자 단위로 보장되므로 여러 연산에 걸쳐있는 경우에만 트랜잭션이 필요합니다.
문제 해결 .....
(가) ... 시작 END 블록 오류 메시지 메시지 (3902)를 해결 않았다 .. 내가 눈치 데 그의 BEGIN..END 블록하지 않고, 이전 실행 프로 시저가 여전히 커밋되지 않은 상태로 걸려있을 것입니다.
(b) IF @@ ERROR <> 0 BEGIN은 항상 true이므로 내부의 스크립트 블록이 실행되고있는 것은 당연합니다.
(c) (b)로 인해 디버거가 IF 문을지나 이동하지 않았습니다.
감사합니다. Adam 많이.
내 대답으로 당신을 솔루션으로 이끄면, 체크 표시를 클릭하여 수락하십시오. 나중에 다른 사람들을 위해 원래 코드가 있도록 질문을 되돌릴 수도 있습니다. –
- 1. Android Add Transaction without Transaction
- 2. Paypal IPN Transaction ID의
- 3. ROLLBACK TRANSACTION 요청에 SQL Server에서 해당 BEGIN TRANSACTION 오류가 없음
- 4. Java Transaction Manager
- 5. TRANSACTION 내 커서 루핑
- 6. Bing Maps Transaction Tracking
- 7. RAISERROR 및 ROLLBACK TRANSACTION
- 8. Java Distribute Transaction
- 9. Hibernate Transaction Manager 호
- 10. Java. java.lang.NullPointerException in Transaction
- 11. Spring & Hibernate transaction crash
- 12. JpaRepository, @Transaction 및 repository.saveAndFlush
- 13. MS SSIS에서의 Oracle Transaction
- 14. Rails 3.2 ActiveRecord Transaction
- 15. NHibernate Session/Transaction Woes
- 16. hibernate, spring - transaction
- 17. @Transaction in Spring
- 18. Objectify transaction throws IllegalStateException
- 19. 메시지 245, 수준 16, 상태 1, 줄 1 변환에 실패
- 20. PREPARE TRANSACTION 작업을 수행하는 방법
- 21. jpql sql with same transaction
- 22. Authorize.net CIM Duplicate Transaction Window
- 23. Django - Postgresql : transaction and concurrency
- 24. mongoDB의 findAndModify가 "transaction-save"입니까
- 25. mysql에서 MySQL Transaction + PHP 문제
- 26. 웹 서비스의 Oracle Transaction Rollback
- 27. Codeigniter : mysql transaction 및 affected_rows
- 28. PHP Transaction-like sql이 필요합니까?
- 29. Spring AMQP/RabbitMQ와 Hibernate Transaction Mananger
- 30. JTA Transaction Managers는 어떻게 런타임에 배포합니까?
1. if body의 본문을 BEGIN 및 END로 묶었습니다. 이렇게하면 프로 시저가 실행되고 Command (s) completed successfully (성공적으로 완료되었습니다.)라는 오류 메시지가 나타납니다. 2. 테이블을 볼 때 새 레코드가 없습니다. 즉, 오류 메시지 만 제거했지만 문제는 해결되지 않았습니다. 삽입이 없습니다. –
"명령이 성공적으로 완료되었습니다"는 오류 메시지가 아닙니다. 삽입물이 보이지 않을 경우, a) 일괄 처리가 끝날 때 커밋되지 않은 트랜잭션이 있거나, b) 본질적으로 또는 코드에 표현 된대로 논리가 잘못되었거나 c) 값이 기대와 다른 경우. 현재 (업데이트 된) 코드와 변수 값의 인쇄물을 보지 않고 어떤 원인이 있는지 알 수는 없습니다. –
업데이트 된 절차 –