데이터 형식 매핑(ODBC)

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

SQL Server Native Client ODBC 드라이버는 SQL Server SQL 데이터 형식을 ODBC SQL 데이터 형식에 매핑합니다. 아래 섹션에서는 SQL Server SQL 데이터 형식 및 매핑되는 ODBC SQL 데이터 형식에 대해 설명합니다. 또한 ODBC SQL 데이터 형식과 해당 ODBC C 데이터 형식, 지원되는 변환 및 기본 변환에 대해서도 설명합니다.

참고 항목

타임스탬프 열의 값은 날짜/시간 값이 아니라 행의 SQL Server 작업 시퀀스를 나타내는 binary(8) 또는 varbinary(8) 값이므로 SQL Server타임스탬프 데이터 형식은 SQL_BINARY 또는 SQL_VARBINARY ODBC 데이터 형식에 매핑됩니다. SQL Server Native Client ODBC 드라이버에서 홀수 바이트인 SQL_C_WCHAR(유니코드) 값이 발견되면 후행 홀수 바이트가 잘립니다.

ODBC의 sql_variant 데이터 형식 처리

sql_variant 데이터 형식 열에는 텍스트, ntext 및 이미지같은 큰 개체(LOB)를 제외한 SQL Server의 모든 데이터 형식이 포함될 수 있습니다. 예를 들어 열에는 일부 행의 작은 값, 다른 행의 부동 소수 자릿수 값 및 re기본der의 char/nchar 값이 포함될 수 있습니다.

sql_variant 데이터 형식은 Visual Basic의 Variant 데이터 형식과 유사합니다.

서버에서 데이터 검색

ODBC에는 변형 형식의 개념이 없으므로 SQL Server에서 ODBC 드라이버와 함께 sql_variant 데이터 형식의 사용을 제한합니다. SQL Server에서 바인딩이 지정된 경우 sql_variant 데이터 형식은 문서화된 ODBC 데이터 형식 중 하나에 바인딩되어야 합니다. SQL Server Native Client ODBC 드라이버와 관련된 새 특성인 SQL_CA_SS_VARIANT_TYPE sql_variant 열에 있는 인스턴스의 데이터 형식을 사용자에게 반환합니다.

바인딩이 지정되지 않은 경우 SQLGetData 함수를 사용하여 sql_variant 열에 있는 인스턴스의 데이터 형식을 확인할 수 있습니다.

sql_variant 데이터를 검색하려면 다음 단계를 수행합니다.

  1. SQLFetch를 호출하여 검색된 행의 위치를 지정합니다.

  2. SQLGetData를 호출하여 형식에 대한 SQL_C_BINARY 지정하고 데이터 길이에 대해 0을 지정합니다. 이렇게 하면 드라이버가 sql_variant 헤더를 읽습니다. 헤더는 sql_variant 열에 해당 인스턴스의 데이터 형식을 제공합니다. SQLGetData 는 값의 크기(바이트)를 반환합니다.

  3. SQL_CA_SS_VARIANT_TYPE 특성 값으로 지정하여 SQLColAttribute를 호출합니다. 이 함수는 sql_variant 열에 있는 인스턴스의 C 데이터 형식을 클라이언트에 반환합니다.

다음은 이전 단계를 보여 주는 코드 세그먼트입니다.

while ((retcode = SQLFetch (hstmt))==SQL_SUCCESS)  
{  
    if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)  
    {  
        SQLError (NULL, NULL, hstmt, NULL,   
                    &lNativeError,szError,MAX_DATA,&sReturned);  
        printf_s ("%s\n",szError);  
        goto Exit;  
    }  
    retcode = SQLGetData (hstmt, 1, SQL_C_BINARY,   
                                pBuff,0,&Indicator);//Figure out the length  
    if (retcode != SQL_SUCCESS_WITH_INFO && retcode != SQL_SUCCESS)  
    {  
        SQLError (NULL, NULL, hstmt, NULL, &lNativeError,   
                    szError,MAX_DATA,&sReturned);  
        printf_s ("%s\n",szError);  
        goto Exit;  
    }  
    printf_s ("Byte length : %d ",Indicator); //Print out the byte length  
  
    int iValue = 0;  
    retcode = SQLColAttribute (hstmt, 1, SQL_CA_SS_VARIANT_TYPE, NULL,   
                                        NULL,NULL,&iValue);  //Figure out the type  
    printf_s ("Sub type = %d ",iValue);//Print the type, the return is C_type of the column]  
  
// Set up a new binding or do the SQLGetData on that column with   
// the appropriate type  
}  

사용자가 SQLBindCol을 사용하여 바인딩을 만드는 경우 드라이버는 메타데이터와 데이터를 읽습니다. 그런 다음 데이터를 바인딩에 지정된 적절한 ODBC 형식으로 변환합니다.

서버로 데이터 보내기

SQL Server Native Client ODBC 드라이버와 관련된 새 데이터 형식인 SQL_SS_VARIANT sql_variant 열로 전송되는 데이터에 사용됩니다. 매개 변수를 사용하여 서버에 데이터를 보낼 때(예: INSERT INTO TableName VALUES(?,?)) SQLBindParameter 는 C 형식 및 해당 SQL Server 형식을 포함한 매개 변수 정보를 지정하는 데 사용됩니다. SQL Server Native Client ODBC 드라이버는 C 데이터 형식을 적절한 sql_variant 하위 형식 중 하나로 변환합니다.

참고 항목

결과 처리(ODBC)