가능한 SQL 문이 많기 때문에 가능한 문제 조건의 범위는 광범위합니다 – SQL/CLI 진단에 대한 장에서 클래스 22000(데이터 예외) 및 클래스 23000(무결성 제약 조건 위반)의 SQLSTATE 오류를 참조하십시오. 또한 경고 및 “데이터 없음” 조건(예: UPDATE Table_1 SET column_1 = 0의 실행) TABLE_1에 행이 없는 경우 SQLSTATE 02000 “데이터를 찾을 수 없음”이 발생합니다. 문자열의 옥텟 길이를 전달하는 경우: 아니요. 예: 이 예제에서 응용 프로그램은 정보가 요청된 개체에 대한 빈번한 정보를 제공합니다. 세 개의 “고객” 테이블이 결과 집합에서 반환되었다고 가정합니다: 사용자가 소유한 첫 번째 테이블, 영업 부서가 소유한 두 번째 테이블, 세 번째 테이블은 경영진이 만든 보기입니다. 최종 사용자에게 선택할 테이블을 명확하지 않을 수 있습니다. 응용 프로그램에서 SQLTables 호출에서 OwnerName 인수를 지정한 경우 하나의 테이블만 반환되고 성능이 향상됩니다. 하나의 결과 행만 반환하는 데 필요한 네트워크 트래픽이 적고 원치 않는 행이 데이터베이스에서 필터링됩니다. 또한 TableType 인수가 제공된 경우, 서버로 전송된 SQL은 다음과 같이 3개의 쿼리 유니온에서 단일 Select 문으로 최적화될 수 있습니다. 명령문이 실행되면 드라이버는 하나의 네트워크 왕복을 사용하여 전체 배열 내용을 처리하려고 시도합니다.

예를 들어 다음 예제인 사례 1과 사례 2를 비교해 보겠습니다. 많은 ODBC 드라이버를 사용하면 SQL_MAX_LENGTH 특성을 지원하여 네트워크를 통해 검색되는 데이터의 양을 제한할 수 있습니다. 이 특성을 사용하면 드라이버가 x바이트의 데이터만 클라이언트와 관련이 있음을 데이터베이스 서버에 통신할 수 있습니다. 서버는 모든 결과 열에 대해 첫 번째 x 바이트의 데이터만 전송하여 응답합니다. 이러한 최적화는 네트워크 트래픽을 크게 줄이고 클라이언트 성능을 향상시킵니다. 앞의 예제에서는 하나의 행만 반환했지만 결과 집합에서 100개의 행이 반환되는 경우성능 이 향상이 상당합니다. 응용 프로그램은 여러 실행이 필요하지 않도록 카탈로그 함수에서 정보를 캐시해야 합니다. 예를 들어 응용 프로그램에서 SQLGetTypeInfo를 한 번 호출하고 응용 프로그램이 종속된 결과 집합의 요소를 캐시합니다. 모든 응용 프로그램이 카탈로그 함수에서 생성된 결과 집합의 모든 요소를 사용할 가능성은 없으므로 캐시된 정보를 유지 관리하기가 어렵지 않습니다. 많은 응용 프로그램 개발자는 SQLGetData를 크기 x의 컨테이너로 호출하면 ODBC 드라이버가 서버에서 x 바이트의 정보만 검색한다고 잘못 가정합니다.

SQLGetData는 하나의 열에 대해 여러 번 호출할 수 있으므로 대부분의 드라이버는 큰 청크에서 긴 데이터를 검색한 다음 요청시 사용자에게 반환하여 네트워크 사용을 최적화합니다. 예를 들어 연결 시 드라이버 정보를 수집하는 것이 좋지만 두 단계가 아닌 한 단계로 수집하는 것이 더 효율적인 경우가 많습니다. 일부 ODBC 응용 프로그램은 이미 연결된 연결 핸들에 대한 레코드가 없는 정보 수집 루틴을 호출하도록 설계되었습니다. 예를 들어 일부 응용 프로그램은 연결을 설정한 다음 드라이버에 대한 정보를 다시 연결하고 수집하는 별도의 DLL 또는 공유 라이브러리에서 루틴을 호출합니다. 별도의 엔터티로 설계된 응용 프로그램은 두 번째 연결을 설정하는 대신 이미 연결된 HDBC 포인터를 데이터 수집 루틴으로 전달해야 합니다. 예: 이 예제에서는 두 개의 SQL 문을 준비하고 실행합니다. 실행하기 전에 모든 준비를 완료할 수 있도록 두 개의 서로 다른 stmts를 사용합니다. 예를 들어, SQLPrepare/SQLExecute 및 SQLExecDirect를 사용하여 대량 삽입 작업의 경우 매개 변수 값 의 배열을 전달하면 ODBC 호출 로드 및 네트워크 트래픽을 줄일 수 있습니다.