[201310114] 오류 발생, 스크롤이 없음

2576 단어 실무, 일, 총무
테스트 코드:
SET XACT_ABORT OFF
go

BEGIN TRAN
    BEGIN TRY
            DELETE dbo.T 
            SELECT * FROM [     ] --     ,T   
            --SELECT 1/0 --  Catch    
            PRINT '11'
    END TRY
    BEGIN CATCH
        PRINT 'ROLLBACK'
        SELECT @@ERROR    
        ROLLBACK
    END CATCH
COMMIT    

/*  :
    1.SELECT * FROM [     ]         ,     ?
    2.SELECT * FROM [     ]         ?
    3.   SET XACT_ABORT ON     ,  SELECT * FROM [     ]       
               :    (     )   SET XACT_ABORT    。    ?     
*/

질문:
한session에서 상기 코드를 실행한 다음 다른session에서 select * from T를 실행하면 select 문장이 막힌 것을 발견합니다
이유:
sql 컴파일된 프로세스Parse->Bind->Optimize->Execute
일반적으로 Parse에서 Optimize까지는 컴파일 단계이고 Execute는 실행 단계라고 여긴다
try catch는 더 이상 Bind와Optimize 단계에서 발생한 오류를 포획하지 않을 것으로 예상됩니다. 위에서 발생한 오류는 컴파일 오류로 간주되지 않을 수 있으므로xact를 on으로 사용하면 자동으로 굴러갈 수 있습니다.
해결 방법:
SET XACT 사용ABORT ON이 사물을 굴러갑니다.

좋은 웹페이지 즐겨찾기