다음을 통해 공유


오류 및 메시지 처리

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)

애플리케이션이 ODBC 함수를 호출하면 드라이버는 함수를 실행하고 두 가지 방법으로 진단 정보를 반환합니다. 반환 코드는 ODBC 함수의 전반적인 성공 또는 실패를 나타내고 진단 레코드는 함수에 대한 자세한 정보를 제공합니다. 진단 레코드에는 헤더 레코드 및 상태 레코드가 포함됩니다. 함수가 성공하더라도 하나 이상의 진단 레코드인 헤더 레코드가 반환됩니다.

진단 정보는 개발 시 하드 코딩된 SQL 문의 잘못된 핸들 및 구문 오류와 같은 프로그래밍 오류를 catch하는 데 사용됩니다. 런타임에 사용자가 입력한 SQL 문의 데이터 잘림, 규칙 위반 및 구문 오류와 같은 런타임 오류 및 경고를 catch하는 데도 사용됩니다. 프로그램 논리는 일반적으로 반환 코드를 기반으로 합니다.

예를 들어 애플리케이션이 SQLFetch를 호출하여 결과 집합의 행을 검색한 후 반환 코드는 결과 집합의 끝에 도달했는지(SQL_NO_DATA), 정보 메시지가 반환되었는지(SQL_SUCCESS_WITH_INFO) 또는 오류가 발생했는지(SQL_ERROR) 나타냅니다.

SQL Server Native Client ODBC 드라이버가 SQL_SUCCESS 이외의 항목을 반환하는 경우 애플리케이션은 SQLGetDiagRec를 호출하여 정보 또는 오류 메시지를 검색할 수 있습니다. 둘 이상의 메시지가 있는 경우 SQLGetDiagRec를 사용하여 메시지 집합을 위아래로 스크롤합니다.

반환 코드 SQL_INVALID_HANDLE 항상 프로그래밍 오류를 나타내며 런타임에 발생하지 않아야 합니다. 다른 모든 반환 코드는 런타임 정보를 제공하지만 SQL_ERROR 프로그래밍 오류를 나타낼 수 있습니다.

원래 Microsoft SQL Server 네이티브 API인 C용 DB-Library를 사용하면 애플리케이션에서 오류 또는 메시지를 반환하는 콜백 오류 처리 및 메시지 처리 함수를 설치할 수 있습니다. PRINT, RAISERROR, DBCC 및 SET와 같은 일부 Transact-SQL 문은 결과 집합 대신 DB-Library 메시지 처리기 함수에 결과를 반환합니다. 그러나 ODBC API에는 이러한 콜백 기능이 없습니다. SQL Server Native Client ODBC 드라이버가 SQL Server에서 돌아오는 메시지를 감지하면 ODBC 반환 코드를 SQL_SUCCESS_WITH_INFO 또는 SQL_ERROR 설정하고 메시지를 하나 이상의 진단 레코드로 반환합니다. 따라서 ODBC 애플리케이션은 이러한 반환 코드를 신중하게 테스트하고 SQLGetDiagRec를 호출하여 메시지 데이터를 검색해야 합니다.

추적 오류에 대한 자세한 내용은 데이터 액세스 추적을 참조 하세요. SQL Server 2012(11.x)에 추가된 오류 추적 기능 향상에 대한 자세한 내용은 확장 이벤트 로그의 진단 정보 액세스를 참조 하세요.

섹션 내용

참고 항목

SQL Server Native Client(ODBC)