ERROR_STATE(Transact-SQL)
적용 대상: Microsoft Fabric의 Microsoft Fabric Warehouse에 있는 SQL Server Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) SQL 분석 엔드포인트
TRY...CATCH 구문의 CATCH 블록을 실행시킨 오류의 상태 번호를 반환합니다.
구문
ERROR_STATE ( )
반환 형식
int
Return Value
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 블록을 호출한 오류에서 상태를 반환합니다.
예제
A. CATCH 블록에서 ERROR_STATE 사용
다음 예에서는 0으로 나누기 오류를 일으키는 SELECT
문을 보여 줍니다. 오류의 상태가 반환됩니다.
BEGIN TRY
-- Generate a divide by zero error
SELECT 1/0;
END TRY
BEGIN CATCH
SELECT ERROR_STATE() AS ErrorState;
END CATCH;
GO
B. 다른 오류 처리 도구와 함께 CATCH 블록에서 ERROR_STATE 사용
다음 예에서는 0으로 나누기 오류를 일으키는 SELECT
문을 보여 줍니다. 오류 상태와 함께 오류와 관련된 정보가 반환됩니다.
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
예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)
C. 다른 오류 처리 도구와 함께 CATCH 블록에서 ERROR_STATE 사용
다음 예에서는 0으로 나누기 오류를 일으키는 SELECT
문을 보여 줍니다. 오류 상태와 함께 오류와 관련된 정보가 반환됩니다.
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_MESSAGE() AS ErrorMessage;
END CATCH;
GO
참고 항목
sys.messages(Transact-SQL)
TRY...CATCH(Transact-SQL)
ERROR_LINE(Transact-SQL)
ERROR_MESSAGE(Transact-SQL)
ERROR_NUMBER(Transact-SQL)
ERROR_PROCEDURE(Transact-SQL)
ERROR_SEVERITY(Transact-SQL)
RAISERROR(Transact-SQL)
@@ERROR(Transact-SQL)
오류 및 이벤트 참조(데이터베이스 엔진)