TRY ... CATCH를 사용하여 SQL Server 오류를 처리하는 단계별 가이드

실행을 중단하지 않고 오류 식별

Transact- SQL 의 TRY ... CATCH 문은 데이터베이스 응용 프로그램의 오류 조건을 감지하고 처리합니다. 이 문은 SQL Server 오류 처리의 초석이며 강력한 데이터베이스 응용 프로그램 개발의 중요한 부분입니다. TRY ... CATCH는 2008, Azure SQL 데이터베이스, Azure SQL 데이터웨어 하우스 및 병렬 데이터웨어 하우스로 시작하는 SQL Server에 적용됩니다.

TRY..CATCH 소개

TRY ... CATCH는 두 가지 Transact-SQL 문을 지정할 수있게하여 작동합니다. 하나는 "시도"하고 다른 하나는 발생할 수있는 오류를 "catch"하는 데 사용합니다. SQL Server가 TRY ... CATCH 문을 발견하면 TRY 절에 포함 된 문을 즉시 실행합니다. TRY 문이 성공적으로 실행되면 SQL Server는 단순히 계속 실행됩니다. 그러나 TRY 문에서 오류가 발생하면 SQL Server는 오류를 정상적으로 처리하기 위해 CATCH 문을 실행합니다.

기본 구문은 다음 형식을 취합니다.

시작하기 {sql_statement | statement_block} 끝내기 시작하기 CATCH [{sql_statement | statement_block}] END CATCH [; ]

TRY ... CATCH 예제

예제를 사용하여이 문장을 사용하는 것을 이해하는 것이 가장 쉽습니다. 조직의 각 직원에 대한 정보가 들어있는 "Employees"라는 테이블이 포함 된 인사 데이터베이스의 관리자라고 가정 해보십시오. 이 테이블은 정수 직원 ID 번호를 기본 키로 사용 합니다. 아래 설명을 사용하여 새 직원을 데이터베이스에 삽입하려고 시도 할 수 있습니다.

INSERT INTO 직원 (ID, 이름, 성, 확장) VALUES (12497, 'Mike', 'Chapple', 4201)

정상적인 상황에서이 명령문은 Employees 테이블에 행을 추가합니다. 그러나 ID 12497의 직원이 데이터베이스에 이미 존재하는 경우 행을 삽입하면 기본 키 제약 조건을 위반하게되고 다음과 같은 오류가 발생합니다.

메시지 2627, 수준 14, 상태 1, 줄 1 PRIMARY KEY 제약 조건 'PK_employee_id'위반 'dbo.employees'개체에 중복 키를 삽입 할 수 없습니다. 그 진술서는 만료되었습니다.

이 오류는 문제를 해결하는 데 필요한 정보를 제공하지만 두 가지 문제가 있습니다. 첫째, 메시지는 비밀 스럽습니다. 여기에는 평균 사용자가 알 수없는 오류 코드, 행 번호 및 기타 정보가 포함됩니다. 둘째, 더 중요한 것은 명령문이 중단되고 응용 프로그램이 중단 될 수 있다는 것입니다.

다른 방법은 아래와 같이 TRY ... CATCH 문에 문을 래핑하는 것입니다.

BEGIN INSERT INTO 직원에게 (ID, 이름, 성, 확장) VALUES (12497, 'Mike', 'Chapple', 4201) 끝내기 시작합니다 '오류 :'+ ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = '직원 메일', @recipients = 'hr@foo.com', @body = '새 직원 레코드를 만드는 동안 오류가 발생했습니다.', @subject = '직원 ID 중복 오류'; 종착역

이 예에서 발생하는 모든 오류는 명령을 실행하는 사용자와 hr@foo.com 전자 메일 주소로보고됩니다. 사용자에게 표시된 오류는 다음과 같습니다.

오류 : PRIMARY KEY 제약 조건 'PK_employee_id'위반 'dbo.employees'개체에 중복 키를 삽입 할 수 없습니다. 메일이 대기 중입니다.

가장 중요한 점은 응용 프로그램 실행이 정상적으로 계속되어 프로그래머가 정상적으로 오류를 처리 할 수 ​​있다는 것입니다. TRY ... CATCH 문을 사용하면 SQL Server 데이터베이스 응용 프로그램에서 발생하는 오류를 사전에 감지하고 처리 할 수 ​​있습니다.

더 배우기

SQL ( Structured Query Language)에 대해 더 자세히 알고 싶다면 Introduction to SQL을 읽으십시오.