진단 레코드 및 필드

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

진단 레코드는 ODBC 환경, 연결, 문 또는 설명자 핸들과 연결됩니다. ODBC 함수가 SQL_SUCCESS 또는 SQL_INVALID_HANDLE 이외의 반환 코드를 발생시키는 경우 함수에서 호출하는 핸들에는 정보 또는 오류 메시지가 포함된 관련 진단 레코드가 있습니다. 이러한 레코드는 해당 핸들을 사용하여 다른 함수가 호출될 때까지 보존되며, 이때 삭제됩니다. 한 번에 핸들과 연결할 수 있는 진단 레코드 수에는 제한이 없습니다.

진단 레코드에는 헤더와 상태의 두 가지 유형이 있습니다. 헤더 레코드는 레코드 0입니다. 상태 레코드가 있으면 레코드 1 이상입니다. 진단 레코드에는 헤더 레코드 및 상태 레코드에 대한 다른 필드가 포함됩니다. ODBC 구성 요소에서 해당 진단 레코드 필드를 정의할 수도 있습니다.

헤더 레코드의 필드에는 반환 코드, 행 수, 상태 레코드 수 및 실행된 문 유형을 포함하여 함수 실행에 대한 일반 정보가 포함됩니다. 헤더 레코드는 ODBC 함수가 SQL_INVALID_HANDLE 반환하지 않는 한 항상 만들어집니다. 헤더 레코드의 전체 필드 목록은 SQLGetDiagField를 참조 하세요.

상태 레코드의 필드에는 SQLSTATE, 네이티브 오류 번호, 진단 메시지, 열 번호 및 행 번호를 포함하여 ODBC 드라이버 관리자, 드라이버 또는 데이터 원본에서 반환된 특정 오류 또는 경고에 대한 정보가 포함됩니다. 상태 레코드는 함수가 SQL_ERROR, SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_NEED_DATA 또는 SQL_STILL_EXECUTING 반환하는 경우에만 생성됩니다. 상태 레코드의 전체 필드 목록은 SQLGetDiagField를 참조 하세요.

SQLGetDiagRec 는 ODBC SQLSTATE, 네이티브 오류 번호 및 진단 메시지 필드와 함께 단일 진단 레코드를 검색합니다. 이 기능은 ODBC 2와 비슷합니다.xSQLError 함수입니다. ODBC 3에서 가장 간단한 오류 처리 함수입니다.x는 RecNumber 매개 변수를 1로 설정하고 SQLGetDiagRec에서 SQL_NO_DATA 반환할 때까지 RecNumber를 1씩 증분하여 SQLGetDiagRec를 반복적으로 호출합니다. 이는 ODBC 2와 동일합니다.SQL_NO_DATA_FOUND 반환할 때까지 SQLError를 호출하는 x 애플리케이션입니다.

ODBC 3.x 는 ODBC 2보다 훨씬 더 많은 진단 정보를 지원합니다.x. 이 정보는 SQLGetDiagField를 사용하여 검색된 진단 레코드의 추가 필드에 저장됩니다.

SQL Server Native Client ODBC 드라이버에는 SQLGetDiagField를 사용하여 검색할 수 있는 드라이버별 진단 필드가 있습니다. 이러한 드라이버별 필드의 레이블은 sqlncli.h에서 정의됩니다. 이러한 레이블을 사용하여 각 진단 레코드와 연결된 SQL Server 상태, 심각도 수준, 서버 이름, 프로시저 이름 및 줄 번호를 검색합니다. 또한 sqlncli.h에는 애플리케이션이 diagIdentifier가 SQL_DIAG_DYNAMIC_FUNCTION_CODE 설정된 SQLGetDiagField 를 호출하는 경우 드라이버가 Transact-SQL 문을 식별하는 데 사용하는 코드의 정의가 포함되어 있습니다.

SQLGetDiagField 는 기본 드라이버에서 캐시하는 오류 정보를 사용하여 ODBC 드라이버 관리자에 의해 처리됩니다. ODBC 드라이버 관리자는 성공적으로 연결될 때까지 드라이버 관련 진단 필드를 캐시하지 않습니다. SQLGetDiagField 는 연결이 성공적으로 완료되기 전에 드라이버별 진단 필드를 가져오기 위해 호출되는 경우 SQL_ERROR 반환합니다. ODBC 연결 함수에서 SQL_SUCCESS_WITH_INFO를 반환할 경우 해당 연결 함수의 드라이버별 진단 필드를 아직 사용할 수 없습니다. Connect 함수 후에 다른 ODBC 함수를 호출 한 후에만 드라이버별 진단 필드에 대해 SQLGetDiagField 호출을 시작할 수 있습니다.

SQL Server Native Client ODBC 드라이버에서 보고한 대부분의 오류는 SQLGetDiagRec에서 반환된 정보만 사용하여 효과적으로 진단할 수 있습니다. 그러나 경우에 따라 드라이버별 진단 필드에서 반환되는 정보는 오류를 진단하는 데 중요합니다. SQL Server Native Client ODBC 드라이버를 사용하여 애플리케이션에 대한 ODBC 오류 처리기를 코딩하는 경우 SQLGetDiagField를 사용하여 적어도 SQL_DIAG_SS_MSGSTATE 검색하고 드라이버 관련 필드를 SQL_DIAG_SS_SEVERITY 것이 좋습니다. SQL Server 코드의 여러 위치에서 특정 오류가 발생할 수 있는 경우 SQL_DIAG_SS_MSGSTATE Microsoft 지원 엔지니어에게 특히 오류가 발생한 위치를 나타내며 때로는 문제 진단에 도움이 됩니다.

참고 항목

오류 및 메시지 처리