[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이 사물을 굴러갑니다.