SQLColAttribute 함수(SQLColAttribute Function)

규칙
도입된 버전: ODBC 3.0 표준 준수: ISO 92

요약
SQLColAttribute 는 결과 집합의 열에 대한 설명자 정보를 반환합니다. 설명자 정보는 문자열, 설명자 종속 값 또는 정수 값으로 반환됩니다.

참고 항목

드라이버 관리자가 이 함수를 ODBC 3에 매핑하는 항목에 대한 자세한 내용을 보려면x 애플리케이션이 ODBC 2에서 작동합니다.x 드라이버는 애플리케이션의 이전 버전과의 호환성을 위한 대체 함수 매핑을 참조 하세요.

구문

  
SQLRETURN SQLColAttribute (  
      SQLHSTMT        StatementHandle,  
      SQLUSMALLINT    ColumnNumber,  
      SQLUSMALLINT    FieldIdentifier,  
      SQLPOINTER      CharacterAttributePtr,  
      SQLSMALLINT     BufferLength,  
      SQLSMALLINT *   StringLengthPtr,  
      SQLLEN *        NumericAttributePtr);  

인수

StatementHandle
[입력] 문 핸들입니다.

ColumnNumber
[입력] 필드 값을 검색할 IRD의 레코드 수입니다. 이 인수는 결과 데이터의 열 수에 해당하며 1부터 시작하여 열 순서를 늘이면서 순차적으로 정렬됩니다. 열은 순서에 따라 설명될 수 있습니다.

이 인수에는 열 0을 지정할 수 있지만 SQL_DESC_TYPE 및 SQL_DESC_OCTET_LENGTH 제외한 모든 값은 정의되지 않은 값을 반환합니다.

FieldIdentifier
[입력] 설명자 핸들입니다. 이 핸들은 쿼리해야 하는 IRD의 필드(예: SQL_COLUMN_TABLE_NAME)를 정의합니다.

CharacterAttributePtr
[출력] 필드가 문자열인 경우 IRD의 ColumnNumber 행에 있는 FieldIdentifier 필드의 값을 반환할 버퍼에 대한 포인터입니다. 그렇지 않으면 필드가 사용되지 않습니다.

CharacterAttributePtr이 NULL인 경우 StringLengthPtr은 여전히 CharacterAttributePtr이 가리키는 버퍼에서 반환할 수 있는 총 바이트 수(문자 데이터의 null 종료 문자 제외)를 반환합니다.

BufferLength
[입력] FieldIdentifier가 ODBC 정의 필드이고 CharacterAttributePtr가 문자열 또는 이진 버퍼를 가리키는 경우 이 인수는 *CharacterAttributePtr의 길이여야 합니다. FieldIdentifier가 ODBC 정의 필드이고 *CharacterAttributePtr이 정수인 경우 이 필드는 무시됩니다. *CharacterAttributePtr이 유니코드 문자열인 경우(SQLColAttributeW를 호출할 때) BufferLength 인수는 짝수여야 합니다. FieldIdentifier가 드라이버 정의 필드인 경우 애플리케이션은 BufferLength 인수를 설정하여 드라이버 관리자에 대한 필드의 특성을 나타냅니다. BufferLength 는 다음 값을 가질 수 있습니다.

  • CharacterAttributePtr이 포인터에 대한 포인터인 경우 BufferLength에는 SQL_IS_POINTER 값이 있어야 합니다.

  • CharacterAttributePtr이 문자열에 대한 포인터인 경우 BufferLength는 버퍼의 길이입니다.

  • CharacterAttributePtr이 이진 버퍼에 대한 포인터인 경우 애플리케이션은 SQL_LEN_BINARY_ATTR(길이) 매크로의 결과를 BufferLength에 배치합니다. 그러면 BufferLength에 음수 값이 배치됩니다.

  • CharacterAttributePtr이 고정 길이 데이터 형식에 대한 포인터인 경우 BufferLength는 SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT 또는 SQL_IS_USMALLINT 중 하나여야 합니다.

StringLengthPtr
[출력] *CharacterAttributePtr에서 반환할 수 있는 총 바이트 수(문자 데이터의 null 종료 바이트 제외)를 반환할 버퍼에 대한 포인터입니다.

문자 데이터의 경우 반환할 수 있는 바이트 수가 BufferLength보다 크거나 같으면 *CharacterAttributePtr의 설명자 정보가 BufferLength에서 null 종료 문자의 길이를 뺀 값으로 잘리고 드라이버에서 null로 종료됩니다.

다른 모든 데이터 형식의 경우 BufferLength 값이 무시되고 드라이버는 *CharacterAttributePtr 의 크기가 32비트라고 가정합니다.

NumericAttributePtr
[출력] 필드가 SQL_DESC_COLUMN_LENGTH 같은 숫자 설명자 형식인 경우 IRD의 ColumnNumber 행에 있는 FieldIdentifier 필드의 값을 반환할 정수 버퍼에 대한 포인터입니다. 그렇지 않으면 필드가 사용되지 않습니다. 일부 드라이버는 버퍼의 하위 32비트 또는 16비트만 쓰고 상위 순서 비트는 변경되지 않은 상태로 둘 수 있습니다. 따라서 애플리케이션은 이 함수를 호출하기 전에 값을 0으로 초기화해야 합니다.

반품

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR 또는 SQL_INVALID_HANDLE.

진단

SQLColAttribute가 SQL_ERROR 또는 SQL_SUCCESS_WITH_INFO 반환하는 경우 SQL_HANDLE_STMT HandleTypeHandle of StatementHandle을 사용하여 SQLGetDiagRec 를 호출하여 관련 SQLSTATE 값을 가져올 수 있습니다. 다음 표에서는 SQLColAttribute에서 일반적으로 반환되는 SQLSTATE 값을 나열하고 이 함수의 컨텍스트에서 각 값을 설명합니다. 표기법 "(DM)"은 드라이버 관리자가 반환한 SQLSTATE에 대한 설명 앞에 나와 있습니다. 달리 명시되지 않는 한 각 SQLSTATE 값과 연결된 반환 코드는 SQL_ERROR.

SQLSTATE Error 설명
01000 일반 경고 드라이버 관련 정보 메시지입니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
01004 문자열 데이터, 오른쪽 잘림 버퍼 *CharacterAttributePtr 이 전체 문자열 값을 반환할 만큼 크지 않으므로 문자열 값이 잘렸습니다. 신뢰할 수 없는 문자열 값의 길이는 *StringLengthPtr에서 반환됩니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
07005 커서 사양이 아닌 준비된 문 StatementHandle연결된 문이 결과 집합을 반환하지 않았고 FieldIdentifier가 SQL_DESC_COUNT 않았습니다. 설명할 열이 없었습니다.
07009 설명자 인덱스가 잘못되었습니다. (DM) ColumnNumber에 지정된 값이 0이고 SQL_ATTR_USE_BOOKMARKS 문 특성이 SQL_UB_OFF.

ColumnNumber 인수에 대해 지정된 값이 결과 집합의 열 수보다 큽니다.
HY000 일반 오류 특정 SQLSTATE가 없고 구현별 SQLSTATE가 정의되지 않은 오류가 발생했습니다. 진단 데이터 구조에서 SQLGetDiagField에서 반환된 오류 메시지는 오류와 그 원인을 설명합니다.
HY001 메모리 할당 오류 드라이버가 함수 실행 또는 완료를 지원하는 데 필요한 메모리를 할당할 수 없습니다.
HY008 작업이 취소됨 StatementHandle에 대해 비동기 처리를 사용하도록 설정했습니다. 함수가 호출되었고 실행이 완료되기 전에 StatementHandle에서 SQLCancel 또는 SQLCancelHandle호출되었습니다. 그런 다음 StatementHandle에서 함수가 다시 호출되었습니다.

함수가 호출되었고 실행을 완료하기 전에 다중 스레드 애플리케이션의 다른 스레드에서 StatementHandle에서 SQLCancel 또는 SQLCancelHandle이 호출되었습니다.
HY010 함수 시퀀스 오류 (DM) StatementHandle과 연결된 연결 핸들에 대해 비동기적으로 실행되는 함수가 호출되었습니다. 이 비동기 함수는 SQLColAttribute가 호출되었을 때 계속 실행되었습니다.

(DM) SQLExecute, SQLExecDirect 또는 SQLMoreResults가 StatementHandle에 대해 호출되고 SQL_PARAM_DATA_AVAILABLE 반환되었습니다. 이 함수는 모든 스트리밍된 매개 변수에 대해 데이터를 검색하기 전에 호출되었습니다.

(DM) 이 함수는 SQLPrepare, SQLExecDirect 또는 StatementHandle에 대한 카탈로그 함수를 호출하기 전에 호출되었습니다.

(DM) 이 함수가 아닌 비동기 실행 함수가 StatementHandle에 대해 호출되었고 이 함수가 호출되었을 때 계속 실행되고 있었습니다.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations 또는 SQLSetPos가 StatementHandle에 대해 호출되고 SQL_NEED_DATA 반환되었습니다. 이 함수는 모든 실행 시 데이터 매개 변수 또는 열에 대한 데이터를 보내기 전에 호출되었습니다.
HY013 메모리 관리 오류 메모리 조건이 낮기 때문에 기본 메모리 개체에 액세스할 수 없기 때문에 함수 호출을 처리할 수 없습니다.
HY090 잘못된 문자열 또는 버퍼 길이 (DM) *CharacterAttributePtr 는 문자열이고 BufferLength 는 0보다 작지만 SQL_NTS 같지 않았습니다.
HY091 설명자 필드 식별자가 잘못되었습니다. FieldIdentifier 인수에 지정된 값이 정의된 값 중 하나가 아니며 구현 정의 값이 아닙니다.
HY117 알 수 없는 트랜잭션 상태로 인해 연결이 일시 중단됩니다. 연결 끊기 및 읽기 전용 함수만 허용됩니다. (DM) 일시 중단 상태에 대한 자세한 내용은 SQLEndTran 함수를 참조 하세요.
HYC00 드라이버를 수행할 수 없음 FieldIdentifier 인수에 지정된 값이 드라이버에서 지원되지 않습니다.
HYT01 연결 제한 시간이 만료됨 데이터 원본이 요청에 응답하기 전에 연결 제한 시간이 만료되었습니다. 연결 제한 시간은 SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr를 통해 설정됩니다.
IM001 드라이버는 이 함수를 지원하지 않습니다. (DM) StatementHandle연결된 드라이버는 함수를 지원하지 않습니다.
IM017 비동기 알림 모드에서 폴링을 사용할 수 없습니다. 알림 모델을 사용할 때마다 폴링이 비활성화됩니다.
IM018 이 핸들에서 이전 비동기 작업을 완료하기 위해 SQLCompleteAsync 가 호출되지 않았습니다. 핸들의 이전 함수 호출이 SQL_STILL_EXECUTING 반환하고 알림 모드가 활성화된 경우 사후 처리를 수행하고 작업을 완료하려면 핸들에서 SQLCompleteAsync 를 호출해야 합니다.

SQLPrepare 이후 및 SQLExecute 이전에 호출되는 경우 SQLColAttribute는 데이터 원본이 StatementHandle연결된 SQL 문을 평가하는 시기에 따라 SQLPrepare 또는 SQLExecute에서 반환할 수 있는 모든 SQLSTATE를 반환할 수 있습니다.

성능상의 이유로 애플리케이션은 문을 실행하기 전에 SQLColAttribute를 호출해서는 안 됩니다.

주석

애플리케이션에서 SQLColAttribute에서 반환된 정보를 사용하는 방법에 대한 자세한 내용은 결과 집합 메타데이터를 참조하세요.

SQLColAttribute는 *NumericAttributePtr 또는 *CharacterAttributePtr에서 정보를 반환합니다. 정수 정보는 *NumericAttributePtr 에서 SQLLEN 값으로 반환됩니다. 다른 모든 정보 형식은 *CharacterAttributePtr로 반환됩니다. *NumericAttributePtr에서 정보가 반환되면 드라이버는 CharacterAttributePtr, BufferLengthStringLengthPtr을 무시합니다. *CharacterAttributePtr에서 정보가 반환되면 드라이버는 NumericAttributePtr을 무시합니다.

SQLColAttribute 는 IRD의 설명자 필드에서 값을 반환합니다. 이 함수는 설명자 핸들이 아닌 문 핸들을 사용하여 호출됩니다. 이 섹션의 뒷부분에 나열된 FieldIdentifier 값에 대해 SQLColAttribute에서 반환하는 값은 적절한 IRD 핸들로 SQLGetDescField를 호출하여 검색할 수도 있습니다.

현재 정의된 설명자 필드, ODBC가 도입된 버전 및 정보가 반환되는 인수는 이 섹션의 뒷부분에 나와 있습니다. 다른 데이터 원본을 활용하기 위해 드라이버에서 더 많은 설명자 형식을 정의할 수 있습니다.

ODBC 3.x 드라이버는 각 설명자 필드에 대한 값을 반환해야 합니다. 설명자 필드가 드라이버 또는 데이터 원본에 적용되지 않고 달리 명시되지 않는 한 드라이버는 *StringLengthPtr 에서 0을 반환하거나 *CharacterAttributePtr의 빈 문자열을 반환합니다.

이전 버전과의 호환성

ODBC 3입니다.x 함수 SQLColAttribute는 사용되지 않는 ODBC 2를 대체합니다.x 함수 SQLColAttributes. SQLColAttributes를 SQLColAttribute에 매핑하는 경우(ODBC 2인 경우)x 애플리케이션이 ODBC 3에서 작동합니다.x 드라이버) 또는 SQLColAttribute를 SQLColAttributes매핑합니다(ODBC 3인 경우).x 애플리케이션이 ODBC 2에서 작동합니다.x 드라이버) 드라이버 관리자는 FieldIdentifier 값을 전달하거나 새 값에 매핑하거나 다음과 같이 오류를 반환합니다.

참고 항목

ODBC 3의 FieldIdentifier 값에 사용되는 접두사입니다.x 가 ODBC 2에 사용된 것과 변경되었습니다.x. 새 접두사는 "SQL_DESC"입니다. 이전 접두사는 "SQL_COLUMN"이었습니다.

  • ODBC 2의 #define 값인 경우xFieldIdentifier는 ODBC 3의 #define 값과 동일합니다.xFieldIdentifier, 함수 호출의 값이 전달됩니다.

  • ODBC 2의 #define 값입니다.xFieldIdentifiers SQL_COLUMN_LENGTH, SQL_COLUMN_PRECISION 및 SQL_COLUMN_SCALE ODBC 3의 #define 값과 다릅니다.xFieldIdentifiers SQL_DESC_PRECISION, SQL_DESC_SCALE 및 SQL_DESC_LENGTH. ODBC 2.x 드라이버는 ODBC 2만 지원하면 합니다.x 값입니다. ODBC 3.x 드라이버는 이러한 세 FieldIdentifier에 대해 "SQL_COLUMN" 및 "SQL_DESC" 값을 모두 지원해야 합니다. 정밀도, 소수 자릿수 및 길이가 ODBC 3에서 다르게 정의되기 때문에 이러한 값은 다릅니다.x 는 ODBC 2에 있는 것보다 더 많았습니다.x. 자세한 내용은 열 크기, 10진수, 8진수 길이 전송 및 표시 크기를 참조 하세요.

  • ODBC 2의 #define 값인 경우xFieldIdentifier는 ODBC 3의 #define 값과 다릅니다.xFieldIdentifier는 COUNT, NAME 및 NULLABLE 값과 마찬가지로 함수 호출의 값이 해당 값에 매핑됩니다. 예를 들어 SQL_COLUMN_COUNT SQL_DESC_COUNT 매핑되고 SQL_DESC_COUNT 매핑 방향에 따라 SQL_COLUMN_COUNT 매핑됩니다.

  • FieldIdentifier가 ODBC 3의 새 값인 경우 x. ODBC 2에 해당 값이 없습니다.x, ODBC 3일 때 매핑되지 않습니다.x 애플리케이션은 ODBC 2의 SQLColAttribute 호출에서 사용합니다.x 드라이버를 호출하면 SQLSTATE HY091(잘못된 설명자 필드 식별자)이 반환됩니다.

다음 표에서는 SQLColAttribute에서 반환된 설명자 형식을 나열합니다. NumericAttributePtr 값의 형식은 SQLLEN *입니다.

FieldIdentifier 정보

에서 반환됨
설명
SQL_DESC_AUTO_UNIQUE_VALUE(ODBC 1.0) NumericAttributePtr 열이 자동 증가 열인지 SQL_TRUE.

열이 자동 증가 열이 아니거나 숫자가 아닌 경우 SQL_FALSE.

이 필드는 숫자 데이터 형식 열에만 유효합니다. 애플리케이션은 자동 증가 열을 포함하는 행에 값을 삽입할 수 있지만 일반적으로 열의 값을 업데이트할 수는 없습니다.

자동 증가 열에 삽입하면 삽입 시 고유한 값이 열에 삽입됩니다. 증분은 정의되지 않았지만 데이터 원본에 따라 다릅니다. 애플리케이션은 자동 증가 열이 특정 지점에서 시작되거나 특정 값으로 증가한다고 가정해서는 안 됩니다.
SQL_DESC_BASE_COLUMN_NAME(ODBC 3.0) CharacterAttributePtr 결과 집합 열의 기본 열 이름입니다. 식인 열의 경우처럼 기본 열 이름이 없는 경우 이 변수에는 빈 문자열이 포함됩니다.

이 정보는 읽기 전용 필드인 IRD의 SQL_DESC_BASE_COLUMN_NAME 레코드 필드에서 반환됩니다.
SQL_DESC_BASE_TABLE_NAME(ODBC 3.0) CharacterAttributePtr 열을 포함하는 기본 테이블의 이름입니다. 기본 테이블 이름을 정의할 수 없거나 적용할 수 없는 경우 이 변수에는 빈 문자열이 포함됩니다.

이 정보는 읽기 전용 필드인 IRD의 SQL_DESC_BASE_TABLE_NAME 레코드 필드에서 반환됩니다.
SQL_DESC_CASE_SENSITIVE(ODBC 1.0) NumericAttributePtr 열이 데이터 정렬 및 비교에 대/소문자를 구분하는 것으로 처리되는지 여부를 SQL_TRUE.

열이 데이터 정렬 및 비교에 대/소문자를 구분하지 않거나 문자가 아닌 경우 SQL_FALSE.
SQL_DESC_CATALOG_NAME(ODBC 2.0) CharacterAttributePtr 열을 포함하는 테이블의 카탈로그입니다. 반환된 값은 열이 식이거나 열이 뷰의 일부인 경우 구현 정의됩니다. 데이터 원본이 카탈로그를 지원하지 않거나 카탈로그 이름을 확인할 수 없는 경우 빈 문자열이 반환됩니다. 이 VARCHAR 레코드 필드는 128자로 제한되지 않습니다.
SQL_DESC_CONCISE_TYPE(ODBC 1.0) NumericAttributePtr 간결한 데이터 형식입니다.

날짜/시간 및 간격 데이터 형식의 경우 이 필드는 간결한 데이터 형식을 반환합니다. 예를 들어 SQL_TYPE_TIME 또는 SQL_INTERVAL_YEAR. (자세한 내용은 를 참조하세요 .부록 D: 데이터 형식의 데이터 형식 식별자 및 설명자 입니다.)

이 정보는 IRD의 SQL_DESC_CONCISE_TYPE 레코드 필드에서 반환됩니다.
SQL_DESC_COUNT(ODBC 1.0) NumericAttributePtr 결과 집합에서 사용할 수 있는 열 수입니다. 결과 집합에 열이 없으면 0을 반환합니다. ColumnNumber 인수의 값은 무시됩니다.

이 정보는 IRD의 SQL_DESC_COUNT 헤더 필드에서 반환됩니다.
SQL_DESC_DISPLAY_SIZE(ODBC 1.0) NumericAttributePtr 열의 데이터를 표시하는 데 필요한 최대 문자 수입니다. 표시 크기에 대한 자세한 내용은 열 크기, 10진수, 8진수 길이 전송 및 부록 D: 데이터 형식의 표시 크기를 참조하세요.
SQL_DESC_FIXED_PREC_SCALE(ODBC 1.0) NumericAttributePtr SQL_TRUE 열에 데이터 원본별 고정 정밀도 및 0이 아닌 소수 자릿수가 있는지 확인합니다.

SQL_FALSE 열에 데이터 원본별 고정 정밀도 및 0이 아닌 소수 자릿수가 없는 경우입니다.
SQL_DESC_LABEL(ODBC 2.0) CharacterAttributePtr 열 레이블 또는 제목입니다. 예를 들어 EmpName이라는 열에 직원 이름 레이블이 지정되거나 별칭으로 레이블이 지정될 수 있습니다.

열에 레이블이 없으면 열 이름이 반환됩니다. 열의 레이블이 지정되지 않고 명명되지 않은 경우 빈 문자열이 반환됩니다.
SQL_DESC_LENGTH(ODBC 3.0) NumericAttributePtr 문자열 또는 이진 데이터 형식의 최대 문자 길이 또는 실제 문자 길이인 숫자 값입니다. 고정 길이 데이터 형식의 최대 문자 길이 또는 가변 길이 데이터 형식의 실제 문자 길이입니다. 해당 값은 항상 문자열을 종료하는 null 종료 바이트를 제외합니다.

이 정보는 IRD의 SQL_DESC_LENGTH 레코드 필드에서 반환됩니다.

길이에 대한 자세한 내용은 열 크기, 10진수, 8진수 전송 길이 및 부록 D: 데이터 형식의 표시 크기를 참조하세요.
SQL_DESC_LITERAL_PREFIX(ODBC 3.0) CharacterAttributePtr 이 VARCHAR(128) 레코드 필드에는 드라이버가 이 데이터 형식의 리터럴에 대한 접두사로 인식하는 문자 또는 문자가 포함됩니다. 이 필드에는 리터럴 접두사를 적용할 수 없는 데이터 형식에 대한 빈 문자열이 포함되어 있습니다. 자세한 내용은 리터럴 접두사 및 접미사를 참조 하세요.
SQL_DESC_LITERAL_SUFFIX(ODBC 3.0) CharacterAttributePtr 이 VARCHAR(128) 레코드 필드에는 드라이버가 이 데이터 형식의 리터럴에 대한 접미사로 인식하는 문자 또는 문자가 포함됩니다. 이 필드에는 리터럴 접미사를 적용할 수 없는 데이터 형식에 대한 빈 문자열이 포함되어 있습니다. 자세한 내용은 리터럴 접두사 및 접미사를 참조 하세요.
SQL_DESC_LOCAL_TYPE_NAME(ODBC 3.0) CharacterAttributePtr 이 VARCHAR(128) 레코드 필드에는 데이터 형식의 일반 이름과 다를 수 있는 데이터 형식에 대한 지역화된(네이티브 언어) 이름이 포함됩니다. 지역화된 이름이 없으면 빈 문자열이 반환됩니다. 이 필드는 표시용으로만 사용됩니다. 문자열의 문자 집합은 로캘에 종속되며 일반적으로 서버의 기본 문자 집합입니다.
SQL_DESC_NAME(ODBC 3.0) CharacterAttributePtr 열 별칭(적용되는 경우)입니다. 열 별칭이 적용되지 않으면 열 이름이 반환됩니다. 두 경우 모두 SQL_DESC_UNNAMED SQL_NAMED 설정됩니다. 열 이름이나 열 별칭이 없으면 빈 문자열이 반환되고 SQL_DESC_UNNAMED SQL_UNNAMED 설정됩니다.

이 정보는 IRD의 SQL_DESC_NAME 레코드 필드에서 반환됩니다.
SQL_DESC_NULLABLE(ODBC 3.0) NumericAttributePtr 열에 NULL 값이 있을 수 있으면 NULLABLE을 SQL_. 열에 NULL 값이 없는 경우 SQL_NO_NULLS. 또는 열이 NULL 값을 허용하는지 여부를 알 수 없는 경우 SQL_NULLABLE_UNKNOWN.

이 정보는 IRD의 SQL_DESC_NULLABLE 레코드 필드에서 반환됩니다.
SQL_DESC_NUM_PREC_RADIX(ODBC 3.0) NumericAttributePtr SQL_DESC_TYPE 필드의 데이터 형식이 대략적인 숫자 데이터 형식인 경우 SQL_DESC_PRECISION 필드에 비트 수가 포함되므로 이 SQLINTEGER 필드에는 2의 값이 포함됩니다. SQL_DESC_TYPE 필드의 데이터 형식이 정확한 숫자 데이터 형식인 경우 SQL_DESC_PRECISION 필드에 소수 자릿수가 포함되므로 이 필드에는 10의 값이 포함됩니다. 이 필드는 숫자가 아닌 모든 데이터 형식에 대해 0으로 설정됩니다.
SQL_DESC_OCTET_LENGTH(ODBC 3.0) NumericAttributePtr 문자열 또는 이진 데이터 형식의 길이(바이트)입니다. 고정 길이 문자 또는 이진 형식의 경우 실제 길이(바이트)입니다. 가변 길이 문자 또는 이진 형식의 경우 최대 길이(바이트)입니다. 이 값은 null 종결자를 포함하지 않습니다.

이 정보는 IRD의 SQL_DESC_OCTET_LENGTH 레코드 필드에서 반환됩니다.

길이에 대한 자세한 내용은 열 크기, 10진수, 8진수 전송 길이 및 부록 D: 데이터 형식의 표시 크기를 참조하세요.
SQL_DESC_PRECISION(ODBC 3.0) NumericAttributePtr 숫자 데이터 형식의 경우 해당 정밀도를 나타내는 숫자 값입니다. SQL_TYPE_TIME, SQL_TYPE_TIMESTAMP 및 시간 간격을 나타내는 모든 간격 데이터 형식의 경우 해당 값은 소수 자릿수 초 구성 요소의 적용 가능한 전체 자릿수입니다.

이 정보는 IRD의 SQL_DESC_PRECISION 레코드 필드에서 반환됩니다.
SQL_DESC_SCALE(ODBC 3.0) NumericAttributePtr 숫자 데이터 형식에 적용 가능한 눈금인 숫자 값입니다. DECIMAL 및 NUMERIC 데이터 형식의 경우 정의된 배율입니다. 다른 모든 데이터 형식에 대해 정의되지 않습니다.

이 정보는 IRD의 SCALE 레코드 필드에서 반환됩니다.
SQL_DESC_SCHEMA_NAME(ODBC 2.0) CharacterAttributePtr 열을 포함하는 테이블의 스키마입니다. 반환된 값은 열이 식이거나 열이 뷰의 일부인 경우 구현 정의됩니다. 데이터 원본이 스키마를 지원하지 않거나 스키마 이름을 확인할 수 없는 경우 빈 문자열이 반환됩니다. 이 VARCHAR 레코드 필드는 128자로 제한되지 않습니다.
SQL_DESC_SEARCHABLE(ODBC 1.0) NumericAttributePtr WHERE 절에서 열을 사용할 수 없는 경우 SQL_PRED_NONE. ODBC 2의 SQL_UNSEARCHABLE 값과 동일합니다.x.)

열이 WHERE 절에서만 사용할 수 있지만 LIKE 조건자에서만 사용할 수 있는지 SQL_PRED_CHAR. ODBC 2의 SQL_LIKE_ONLY 값과 동일합니다.x.)

SQL_PRED_BASIC LIKE를 제외한 모든 비교 연산자를 사용하여 WHERE 절에서 열을 사용할 수 있는지 여부를 확인합니다. ODBC 2의 SQL_EXCEPT_LIKE 값과 동일합니다.x.)

비교 연산자가 있는 WHERE 절에서 열을 사용할 수 있는지 SQL_PRED_SEARCHABLE.

형식 SQL_LONGVARCHAR 및 SQL_LONGVARBINARY 열은 일반적으로 SQL_PRED_CHAR 반환합니다.
SQL_DESC_TABLE_NAME(ODBC 2.0) CharacterAttributePtr 열을 포함하는 테이블의 이름입니다. 반환된 값은 열이 식이거나 열이 뷰의 일부인 경우 구현 정의됩니다.

테이블 이름을 확인할 수 없으면 빈 문자열이 반환됩니다.
SQL_DESC_TYPE(ODBC 3.0) NumericAttributePtr SQL 데이터 형식을 지정하는 숫자 값입니다.

ColumnNumber가 0과 같으면 가변 길이 책갈피에 대해 SQL_BINARY 반환되고 고정 길이 책갈피에 대해 SQL_INTEGER 반환됩니다.

날짜/시간 및 간격 데이터 형식의 경우 이 필드는 자세한 데이터 형식인 SQL_DATETIME 또는 SQL_INTERVAL 반환합니다. (자세한 내용은 를 참조하세요 .부록 D: 데이터 형식의 데이터 형식 식별자 및 설명자 입니다.

이 정보는 IRD의 SQL_DESC_TYPE 레코드 필드에서 반환됩니다. 참고: ODBC 2에 대해 작업합니다.x 드라이버, 대신 SQL_DESC_CONCISE_TYPE 사용합니다.
SQL_DESC_TYPE_NAME(ODBC 1.0) CharacterAttributePtr 데이터 원본 종속 데이터 형식 이름; 예를 들어 "CHAR", "VARCHAR", "MONEY", "LONG VARBINARY" 또는 "CHAR ( ) FOR BIT DATA"입니다.

형식을 알 수 없는 경우 빈 문자열이 반환됩니다.
SQL_DESC_UNNAMED(ODBC 3.0) NumericAttributePtr SQL_NAMED 또는 SQL_UNNAMED. IRD의 SQL_DESC_NAME 필드에 열 별칭 또는 열 이름이 포함되어 있으면 SQL_NAMED 반환됩니다. 열 이름 또는 열 별칭이 없으면 SQL_UNNAMED 반환됩니다.

이 정보는 IRD의 SQL_DESC_UNNAMED 레코드 필드에서 반환됩니다.
SQL_DESC_UNSIGNED(ODBC 1.0) NumericAttributePtr 열이 부호 없는지(숫자가 아닌지) SQL_TRUE.

열이 서명되었는지 SQL_FALSE.
SQL_DESC_UPDATABLE(ODBC 1.0) NumericAttributePtr 열은 정의된 상수 값으로 설명됩니다.

SQL_ATTR_READONLY SQL_ATTR_WRITE SQL_ATTR_READWRITE_UNKNOWN

SQL_DESC_UPDATABLE 기본 테이블의 열이 아니라 결과 집합에서 열의 업데이트 가능성을 설명합니다. 결과 집합 열의 기반이 되는 기본 열의 업데이트 가능성은 이 필드의 값과 다를 수 있습니다. 열을 업데이트할 수 있는지 여부는 데이터 형식, 사용자 권한 및 결과 집합 자체의 정의를 기반으로 할 수 있습니다. 열의 작동이 가능한지 여부가 명확하지 않은 경우 SQL_ATTR_READWRITE_UNKNOWN 반환해야 합니다.

SQLColAttribute는 SQLDescribeCol확장 가능한 대안입니다. SQLDescribeCol 은 ANSI-89 SQL을 기반으로 하는 고정된 설명자 정보 집합을 반환합니다. SQLColAttribute 를 사용하면 ANSI SQL-92 및 DBMS 공급업체 확장에서 사용할 수 있는 보다 광범위한 설명자 정보 집합에 액세스할 수 있습니다.

추가 정보 참조
결과 집합의 열에 버퍼 바인딩 SQLBindCol 함수
문 처리 취소 SQLCancel 함수
결과 집합의 열에 대한 정보 반환 SQLDescribeCol 함수
데이터 블록을 가져오거나 결과 집합을 스크롤합니다. SQLFetchScroll 함수
여러 행의 데이터 가져오기 SQLFetch 함수

다음 샘플 코드는 핸들과 연결을 해제하지 않습니다. 핸들 및 문을 해제하는 코드 샘플은 SQLFreeHandle 함수, 샘플 ODBC 프로그램SQLFreeStmt 함수를 참조하세요.

// SQLColAttibute.cpp  
// compile with: user32.lib odbc32.lib  
  
#define UNICODE  
  
#include <windows.h>  
#include <sqlext.h>  
#include <strsafe.h>  
  
struct DataBinding {  
   SQLSMALLINT TargetType;  
   SQLPOINTER TargetValuePtr;  
   SQLINTEGER BufferLength;  
   SQLLEN StrLen_or_Ind;  
};  
  
void printStatementResult(SQLHSTMT hstmt) {  
   int bufferSize = 1024, i;  
   SQLRETURN retCode;  
   SQLSMALLINT numColumn = 0, bufferLenUsed;
   
   retCode = SQLNumResultCols(hstmt, &numColumn);  
   
   SQLPOINTER* columnLabels = (SQLPOINTER *)malloc( numColumn * sizeof(SQLPOINTER*) );  
   struct DataBinding* columnData = (struct DataBinding*)malloc( numColumn * sizeof(struct DataBinding) );  
  
   printf( "Columns from that table:\n" );  
   for ( i = 0 ; i < numColumn ; i++ ) {  
      columnLabels[i] = (SQLPOINTER)malloc( bufferSize*sizeof(char) );  
  
      retCode = SQLColAttribute(hstmt, (SQLUSMALLINT)i + 1, SQL_DESC_LABEL, columnLabels[i], (SQLSMALLINT)bufferSize, &bufferLenUsed, NULL);  
      wprintf( L"Column %d: %s\n", i, (wchar_t*)columnLabels[i] );  
   }  
  
   // allocate memory for the binding  
   for ( i = 0 ; i < numColumn ; i++ ) {  
      columnData[i].TargetType = SQL_C_CHAR;  
      columnData[i].BufferLength = (bufferSize+1);  
      columnData[i].TargetValuePtr = malloc( sizeof(unsigned char)*columnData[i].BufferLength );  
   }  
  
   // setup the binding   
   for ( i = 0 ; i < numColumn ; i++ ) {  
      retCode = SQLBindCol(hstmt, (SQLUSMALLINT)i + 1, columnData[i].TargetType,   
         columnData[i].TargetValuePtr, columnData[i].BufferLength, &(columnData[i].StrLen_or_Ind));  
   }  
  
   printf( "Data from that table:\n" );  
   // fetch the data and print out the data  
   for ( retCode = SQLFetch(hstmt) ; retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO ; retCode = SQLFetch(hstmt) ) {  
      int j;  
      for ( j = 0 ; j < numColumn ; j++ )  
         wprintf( L"%s: %hs\n", columnLabels[j], columnData[j].TargetValuePtr );  
      printf( "\n" );  
   }  
   printf( "\n" );   
}  
  
int main() {  
   int bufferSize = 1024, i, count = 1, numCols = 5;  
   wchar_t firstTableName[1024], * dbName = (wchar_t *)malloc( sizeof(wchar_t)*bufferSize ), * userName = (wchar_t *)malloc( sizeof(wchar_t)*bufferSize );  
   HWND desktopHandle = GetDesktopWindow();   // desktop's window handle  
   SQLWCHAR connStrbuffer[1024];  
   SQLSMALLINT connStrBufferLen, bufferLen;  
   SQLRETURN retCode;  
  
   SQLHENV henv = NULL;   // Environment     
   SQLHDBC hdbc = NULL;   // Connection handle  
   SQLHSTMT hstmt = NULL;   // Statement handle  
  
   struct DataBinding* catalogResult = (struct DataBinding*) malloc( numCols * sizeof(struct DataBinding) );  
   SQLWCHAR* selectAllQuery = (SQLWCHAR *)malloc( sizeof(SQLWCHAR) * bufferSize );  
  
   // connect to database  
   retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
   retCode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLCHAR *)(void*)SQL_OV_ODBC3, -1);  
   retCode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);  
   retCode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)10, 0);  
   retCode = SQLDriverConnect(hdbc, desktopHandle, L"Driver={SQL Server}", SQL_NTS, connStrbuffer, 1025, &connStrBufferLen, SQL_DRIVER_PROMPT);  
   retCode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
  
   // display the database information  
   retCode = SQLGetInfo(hdbc, SQL_DATABASE_NAME, dbName, (SQLSMALLINT)bufferSize, (SQLSMALLINT *)&bufferLen);  
   retCode = SQLGetInfo(hdbc, SQL_USER_NAME, userName, (SQLSMALLINT)bufferSize, &bufferLen);  
  
   for ( i = 0 ; i < numCols ; i++ ) {  
      catalogResult[i].TargetType = SQL_C_CHAR;  
      catalogResult[i].BufferLength = (bufferSize + 1);  
      catalogResult[i].TargetValuePtr = malloc( sizeof(unsigned char)*catalogResult[i].BufferLength );  
   }  
  
   // Set up the binding. This can be used even if the statement is closed by closeStatementHandle  
   for ( i = 0 ; i < numCols ; i++ )  
      retCode = SQLBindCol(hstmt, (SQLUSMALLINT)i + 1, catalogResult[i].TargetType, catalogResult[i].TargetValuePtr, catalogResult[i].BufferLength, &(catalogResult[i].StrLen_or_Ind));  
  
   retCode = SQLTables( hstmt, (SQLWCHAR*)SQL_ALL_CATALOGS, SQL_NTS, L"", SQL_NTS, L"", SQL_NTS, L"", SQL_NTS );  
   retCode = SQLFreeStmt(hstmt, SQL_CLOSE);  
  
   retCode = SQLTables( hstmt, dbName, SQL_NTS, userName, SQL_NTS, L"%", SQL_NTS, L"TABLE", SQL_NTS );  
  
   for ( retCode = SQLFetch(hstmt) ; retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO ; retCode = SQLFetch(hstmt), ++count )  
      if ( count == 1 )  
         StringCchPrintfW( firstTableName, 1024, L"%hs", catalogResult[2].TargetValuePtr );  
   retCode = SQLFreeStmt(hstmt, SQL_CLOSE);  
  
   wprintf( L"Select all data from the first table (%s)\n", firstTableName );  
   StringCchPrintfW( selectAllQuery, bufferSize, L"SELECT * FROM %s", firstTableName );  
  
   retCode = SQLExecDirect(hstmt, selectAllQuery, SQL_NTS);  
   printStatementResult(hstmt);  
}  

참고 항목

ODBC API 참조
ODBC 헤더 파일
샘플 ODBC 프로그램