일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 크롤링
- sql developer
- MSSQL
- rs485
- django
- MSSQL PYTHON
- 텐서플로우
- vscode
- MEAN Stack
- rs422
- tensorflow
- scrapy
- 윈도우10
- windows10
- 오라클
- Serial
- MX Component
- 파이썬
- Visual Studio Code
- Python
- pymssql
- PYTHON MSSQL
- 딥러닝
- M2M
- 장고
- oracle
- c#
- 자본주의
- matplot
- 티스토리 초대장
- Today
- Total
안까먹을라고 쓰는 블로그
[MSSQL] 예외처리 (TRY, CATCH) 본문
Transact-SQL Visual C# 및 Microsoft Visual C++ 언어의 예외 처리와 유사한 방식으로 Microsoft에서 오류 처리를 구현합니다. Transact-SQL 문의 그룹을 TRY 블록으로 묶을 수 있으며 TRY 블록 내에서 오류가 발생하는 경우 일반적으로 CATCH 블록으로 묶은 또 다른 문의 그룹으로 제어가 전달됩니다.
TRY...CATCH 구문은 심각도가 10을 넘으며 데이터베이스 연결을 닫지 않는 모든 실행 오류를 catch합니다.
TRY 블록 다음에는 곧바로 연결된 CATCH 블록이 이어져야 합니다. END TRY와 BEGIN CATCH 문 사이에 다른 문을 포함시키면 구문 오류가 발생합니다.
Syntax
BEGIN TRY
{ sql_statement | statement_block }
END TRY
BEGIN CATCH
[ { sql_statement | statement_block } ]
END CATCH
[ ; ]
Example
SET XACT_ABORT ON
BEGIN TRY
BEGIN TRAN
DECLARE @ERRMSG NVARCHAR(255)
.... 처리할 부분
END
COMMIT TRAN
RETURN
END TRY
BEGIN CATCH
SET @ERRMSG = ERROR_MESSAGE()
PRINT @ERRMSG
IF (XACT_STATE()) = -1
BEGIN
ROLLBACK TRAN
END
ELSE IF (XACT_STATE() = 1 )
BEGIN
COMMIT TRAN
END
END CATCH
SET XACT_ABORT OFF
SET XACT_ABORT 옵션을 ON으로 설정하면 Transact-SQL 문에서 런타임 오류가 발생할 경우
전체 트랜잭션이 종료된 후 롤백됩니다.
TRY...CATCH 구문은 심각도가 10을 넘으며 데이터베이스 연결을 닫지 않는 모든 실행 오류를 catch합니다.
TRY 블록 다음에는 곧바로 연결된 CATCH 블록이 이어져야 합니다. END TRY와 BEGIN CATCH 문 사이에 다른 문을 포함시키면 구문 오류가 발생합니다.
오류 메시지의 전체 텍스트를 반환합니다. 이 텍스트는 길이, 개체 이름 또는 시간과 같은 대체 가능한 매개 변수에 제공된 값을 포함합니다.
오류관련 확인 항목은 아래와 같습니다.
- ERROR_NUMBER()는 오류 번호를 반환합니다.
- ERROR_STATE()는 오류 상태 번호를 반환합니다.
- ERROR_PROCEDURE()는 오류가 발생한 저장 프로시저 또는 트리거의 이름을 반환합니다.
- ERROR_LINE()은 오류를 발생시킨 루틴 내의 줄 번호를 반환합니다.
- ERROR_MESSAGE()는 오류 메시지의 전체 텍스트를 반환합니다. 이 텍스트는 길이, 개체 이름 또는 시간과 같은 대체 가능한 매개 변수에 제공된 값을 포함합니다.
BEGIN TRY
-- Generate a divide-by-zero error.
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO
현재 실행 중인 요청의 사용자 트랜잭션 상태를 보고하는 스칼라 함수입니다. XACT_STATE는 요청에 활성 사용자 트랜잭션이 있는지 여부 및 트랜잭션이 커밋될 수 있는지 여부를 나타냅니다.
끝~
'DataBase > MS SQL' 카테고리의 다른 글
[MSSQL] GROUP BY절(Feat.HAVING, ROLLUP, CUBE, GROUPING SETS) (0) | 2023.11.15 |
---|---|
[MSSQL[ 계층형쿼리,재귀쿼리,트리쿼리 (Feat. with CTE) (0) | 2023.11.15 |
[MSSQL] 트랜잭션(Transaction) (0) | 2023.09.26 |
[MSSQL] 순차 합계구하기 (Feat. OVER, PARTITION BY) (0) | 2023.09.22 |
[MSSQL] 집계함수 (GROUP BY, ROLLUP, CUBE, GROUPING SETS) (0) | 2023.09.21 |