ERROR_STATE(Transact-SQL)
TRY...CATCH 구문의 CATCH 블록을 실행시킨 오류의 상태 번호를 반환합니다.
구문
ERROR_STATE ( )
반환 형식
int
반환 값
CATCH 블록 내에서 호출된 경우 CATCH 블록을 실행하도록 만든 오류 메시지의 상태 번호를 반환합니다.
CATCH 블록 범위 외부에서 호출된 경우 NULL을 반환합니다.
주의
일부 오류 메시지는 Microsoft SQL Server 데이터베이스 엔진 코드의 여러 곳에서 발생할 수 있습니다. 예를 들어 "1105" 오류는 여러 가지 다른 오류 상황에서 발생합니다. 오류를 발생시키는 특정 조건은 각각 고유한 상태 코드를 할당합니다.
Microsoft 기술 자료 등을 사용하여 데이터베이스의 알려진 문제를 확인하는 경우 상태 번호를 사용하여 기록된 문제가 실제로 발생한 오류와 동일한 것인지 판단할 수 있습니다. 예를 들어 기술 자료 문서에서 상태가 2인 1105 오류 메시지를 다루고 있고 실제로 수신한 1105 오류 메시지의 상태가 3인 경우 이 오류는 기술 자료 문서에 보고된 것과 다른 원인에서 비롯되었을 수 있습니다.
SQL Server 지원 엔지니어는 상태 코드를 사용하여 소스 코드에서 해당 오류가 발생한 위치를 찾고 문제를 해결할 수 있습니다.
ERROR_STATE는 CATCH 블록 범위 내의 어떤 위치에서나 호출할 수 있습니다.
ERROR_STATE는 실행 횟수 또는 CATCH 블록의 범위 내의 실행되는 위치에 상관없이 오류 상태를 반환합니다. 이 함수는 오류를 일으킨 문 바로 다음 문에서 오류 번호만 반환하거나 CATCH 블록의 첫 번째 문이 일으킨 오류 번호만 반환하는 @@ERROR와 같은 함수와는 대조적입니다.
중첩된 CATCH 블록 내의 ERROR_STATE는 참조되는 CATCH 블록의 범위에 한정된 오류 상태를 반환합니다. 예를 들어 외부 TRY...CATCH 구문의 CATCH 블록이 중첩된 TRY...CATCH 구문을 포함할 수 있습니다. 중첩된 CATCH 블록 내의 ERROR_STATE는 중첩된 CATCH 블록을 호출한 오류에서 상태를 반환합니다. ERROR_STATE가 외부 CATCH 블록에서 실행되는 경우 해당 CATCH 블록을 호출한 오류에서 상태를 반환합니다.
예
1. CATCH 블록에서 ERROR_STATE 사용
다음 예에서는 0으로 나누기 오류를 일으키는 SELECT 문을 보여 줍니다. 오류의 상태가 반환됩니다.
USE AdventureWorks2008R2;
GO
BEGIN TRY
-- Generate a divide by zero error
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT ERROR_STATE() AS ErrorState;
END CATCH;
GO
2. 다른 오류 처리 도구와 함께 CATCH 블록에서 ERROR_STATE 사용
다음 예에서는 0으로 나누기 오류를 일으키는 SELECT 문을 보여 줍니다. 오류 상태와 함께 오류와 관련된 정보가 반환됩니다.
USE AdventureWorks2008R2;
GO
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
참고 항목