共用方式為


對應資料型態 (ODBC)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Platform System (PDW)

SQL Server Native Client ODBC 驅動程式會將 SQL Server SQL 數據類型對應至 ODBC SQL 數據類型。 下列各節將討論 SQL Server SQL 數據類型及其對應的 ODBC SQL 數據類型。 它們也會討論 ODBC SQL 資料類型及其對應的 ODBC C 資料類型,以及支援的和預設轉換。

注意

SQL Servertimestamp 數據類型會對應至SQL_BINARY或SQL_VARBINARY ODBC 數據類型,因為時間戳數據行中的值不是 datetime 值,而是指出數據列上 SQL Server 活動序列的 binary(8)varbinary(8) 值。 如果 SQL Server Native Client ODBC 驅動程式遇到奇數位節數的 SQL_C_WCHAR (Unicode) 值,則會截斷尾端的奇數位節。

處理 ODBC 中的sql_variant數據類型

sql_variant數據類型數據行可以包含 SQL Server 中任何數據類型,但大型物件(LOB)除外,例如 textntextimage。 例如,數據行可以包含 某些數據列的 smallint 值、 其他數據列的浮 點值,以及 其餘部分的 char/nchar 值。

sql_variant數據類型類似於 Visual Basic 中的 Variant 資料類型。

從伺服器擷取數據

ODBC 沒有變體類型的概念,限制 在 SQL Server 中使用 sql_variant 數據類型與 ODBC 驅動程式。 在 SQL Server 中,如果指定系結, sql_variant 數據類型必須系結至其中一個記載的 ODBC 數據類型。 SQL_CA_SS_VARIANT_TYPE SQL Server Native Client ODBC 驅動程式特有的新屬性,會將 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_SS_VARIANT,SQL Server Native Client ODBC 驅動程式特有的新數據類型,用於傳送至 sql_variant 數據行的數據。 使用參數將數據傳送至伺服器時(例如 INSERT INTO TableName VALUES (?,?)), SQLBindParameter 會用來指定參數資訊,包括 C 類型和對應的 SQL Server 類型。 SQL Server Native Client ODBC 驅動程式會將 C 數據類型轉換成其中一個適當的 sql_variant 子類型。

另請參閱

處理結果 (ODBC)