SQLGetTypeInfo 函式

一致性
引進版本:ODBC 1.0 標準合規性:ISO 92

摘要
SQLGetTypeInfo 會傳回資料來源所支援之資料類型的相關資訊。 驅動程式會以 SQL 結果集的形式傳回信息。 資料類型適用于資料定義語言 (DDL) 語句。

重要

應用程式必須使用 ALTER TABLE 和 CREATE TABLE 語句中 SQLGetTypeInfo 結果集TYPE_NAME 資料行中 傳回的類型名稱。 SQLGetTypeInfo 可能會傳回多個資料列,其值在DATA_TYPE資料行中相同。

語法

  
SQLRETURN SQLGetTypeInfo(  
     SQLHSTMT      StatementHandle,  
     SQLSMALLINT   DataType);  

引數

StatementHandle
[輸入]結果集的語句控制碼。

DataType
[輸入]SQL 資料類型。 這必須是附錄 D:資料類型或驅動程式特定 SQL 資料類型的 SQL 資料類型 一節中的 其中一個值。 SQL_ALL_TYPES指定應該傳回所有資料類型的相關資訊。

傳回

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR或SQL_INVALID_HANDLE。

診斷

SQLGetTypeInfo 傳回SQL_ERROR或SQL_SUCCESS_WITH_INFO時,可以使用 SQL_HANDLE_STMT 的 HandleType StatementHandle 控制碼 呼叫 SQLGetDiagRec 來取得相關聯的 SQLSTATE 值。 下表列出 SQLGetTypeInfo 通常傳 回的 SQLSTATE 值,並說明此函式內容中的每個值;標記法 「(DM)」 在驅動程式管理員傳回的 SQLSTATE 描述之前。 除非另有說明,否則與每個 SQLSTATE 值相關聯的傳回碼會SQL_ERROR。

SQLSTATE 錯誤 描述
01000 一般警告 驅動程式特定的資訊訊息。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
01S02 選項值已變更 由於實作工作條件,指定的語句屬性無效,因此會暫時取代類似的值。 (通話 SQLGetStmtAttr 以判斷暫時替代的值。替代值對 StatementHandle 有效,直到資料指標關閉為止。 可以變更的語句屬性包括:SQL_ATTR_CONCURRENCY、SQL_ATTR_CURSOR_TYPE、SQL_ATTR_KEYSET_SIZE、SQL_ATTR_MAX_LENGTH、SQL_ATTR_MAX_ROWS、SQL_ATTR_QUERY_TIMEOUT和SQL_ATTR_SIMULATE_CURSOR。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
08S01 通訊連結失敗 驅動程式與驅動程式連線的資料來源之間的通訊連結在函式完成處理之前失敗。
24000 不正確資料指標狀態 已開啟 StatementHandle 上的 資料指標, 已呼叫 SQLFetch SQLFetchScroll 。 如果 SQLFetch 或 SQLFetchScroll 尚未傳回SQL_NO_DATA,而且如果 SQLFetch SQLFetchScroll 傳回SQL_NO_DATA,驅動程式就會傳回此錯誤。

語句Handle 上 已開啟結果集,但 未呼叫 SQLFetch SQLFetchScroll
40001 序列化失敗 交易因為與另一個交易發生資源死結而回復。
40003 語句完成未知 此函式執行期間相關聯的連接失敗,且無法判斷交易的狀態。
HY000 一般錯誤 發生錯誤,其中沒有特定的 SQLSTATE,也沒有定義任何實作特定的 SQLSTATE。 *MessageText 緩衝區中 SQLGetDiagRec 回的錯誤訊息描述錯誤及其原因。
HY001 記憶體配置錯誤 驅動程式無法配置支援執行或完成函式所需的記憶體。
HY004 不正確 SQL 資料類型 為引數 DataType 指定的值既不是有效的 ODBC SQL 資料類型識別碼,也不是驅動程式所支援的驅動程式特定資料類型識別碼。
HY008 作業已取消 已針對 StatementHandle 啟用非同步處理,然後呼叫函式,並在完成執行之前, 在 StatementHandle 上 呼叫 SQLCancel SQLCancelHandle 然後在 StatementHandle 再次呼叫函式。

在函式完成執行之前, 會從多執行緒應用程式中的不同執行緒呼叫 StatementHandle,並呼叫 SQLCancel SQLCancelHandle
HY010 函式順序錯誤 (DM) 已針對與 StatementHandle 相關聯的連接控制碼呼叫非同步執行函式。 呼叫 SQLGetTypeInfo 函式時 ,這個非同步函式仍在執行中。

(DM) 已針對 StatementHandle 呼叫 SQLExecute SQLExecDirect SQLMoreResults ,並傳回SQL_PARAM_DATA_AVAILABLE。 在擷取所有資料流程參數的資料之前,會呼叫此函式。

(DM) 呼叫 StatementHandle 的非同步執行函式(而非此函式),並在呼叫此函式時仍在執行中。

(DM) 已針對 StatementHandle 呼叫 SQLExecute SQLExecDirect SQLBulkOperations SQLSetPos ,並傳回SQL_NEED_DATA。 在針對所有資料執行中參數或資料行傳送資料之前,會呼叫此函式。
HY013 記憶體管理錯誤 無法處理函式呼叫,因為基礎記憶體物件無法存取,可能是因為記憶體不足的情況。
HY117 連線因為未知的交易狀態而暫停。 只允許中斷連線和唯讀函式。 (DM) 如需暫停狀態的詳細資訊,請參閱 SQLEndTran 函式
HYC00 未實作選擇性功能 驅動程式或資料來源不支援SQL_ATTR_CONCURRENCY和SQL_ATTR_CURSOR_TYPE語句屬性的目前設定組合。

SQL_ATTR_USE_BOOKMARKS語句屬性已設定為 SQL_UB_VARIABLE,且SQL_ATTR_CURSOR_TYPE語句屬性已設定為驅動程式不支援書簽的資料指標類型。
HYT00 逾時已超過 資料來源傳回結果集之前,查詢逾時期限已過期。 逾時期間是透過 SQLSetStmtAttr 來設定,SQL_ATTR_QUERY_TIMEOUT。
HYT01 已超過連線逾時 在資料來源回應要求之前,連線逾時期限已過期。 連線逾時期間是透過 SQLSetConnectAttr 來設定,SQL_ATTR_CONNECTION_TIMEOUT。
IM001 驅動程式不支援此函式 (DM) 對應至 StatementHandle 驅動程式不支援 函式。
IM017 在非同步通知模式中停用輪詢 每當使用通知模型時,輪詢就會停用。
IM018 尚未呼叫 SQLCompleteAsync ,以完成此控制碼上的先前非同步作業。 如果控制碼上的上一個函式呼叫傳回SQL_STILL_EXECUTING且啟用通知模式, 則必須在控制碼上呼叫 SQLCompleteAsync ,才能執行後續處理並完成作業。

註解

SQLGetTypeInfo 會以標準結果集的形式傳回結果,依DATA_TYPE排序,然後依據資料類型對應至對應 ODBC SQL 資料類型的方式。 資料來源所定義的資料類型優先于使用者定義的資料類型。 因此,排序次序不一定一致,但可以先將排序次序一般化為DATA_TYPE,後面接著遞增TYPE_NAME。 例如,假設資料來源定義了 INTEGER 和 COUNTER 資料類型,其中 COUNTER 是自動遞增,而且使用者定義資料類型 WHOLENUM 也已經定義。 這些會以 INTEGER、WHOLENUM 和 COUNTER 的順序傳回,因為 WHOLENUM 會密切對應至 ODBC SQL 資料類型SQL_INTEGER,而自動遞增資料類型,即使資料來源支援,也不會對應至 ODBC SQL 資料類型。 如需如何使用這項資訊的資訊,請參閱 DDL 語句

如果 DataType 引數指定適用于驅動程式所支援 ODBC 版本的資料類型,但驅動程式不支援,則會傳回空的結果集。

注意

如需 ODBC 類別目錄函式的一般使用、引數和傳回資料的詳細資訊,請參閱 目錄函式

下列資料行已針對 ODBC 3 重新命名。 x . 資料行名稱變更不會影響回溯相容性,因為應用程式會依資料行編號系結。

ODBC 2.0 資料行 ODBC 3. x
PRECISION COLUMN_SIZE
MONEY FIXED_PREC_SCALE
AUTO_INCREMENT AUTO_UNIQUE_VALUE

下列資料行已新增至 SQLGetTypeInfo for ODBC 3 所 傳回的結果集。 x

  • SQL_DATA_TYPE

  • INTERVAL_PRECISION

  • SQL_DATETIME_SUB

  • NUM_PREC_RADIX

下表列出結果集中的資料行。 驅動程式可以定義資料行 19 以外的其他資料行(INTERVAL_PRECISION)。 應用程式應該從結果集結尾倒數,而不是指定明確的序數位置,以存取驅動程式特定的資料行。 如需詳細資訊,請參閱 目錄函 式傳回的資料。

注意

SQLGetTypeInfo 可能不會傳回所有資料類型。 例如,驅動程式可能不會傳回使用者定義的資料類型。 不論 SQLGetTypeInfo 是否傳 回任何有效的資料類型,應用程式都可以使用任何有效的資料類型。 SQLGetTypeInfo 傳回的資料類型是資料來源所支援的資料類型。 它們適用于資料定義語言 (DDL) 語句。 驅動程式可以使用 SQLGetTypeInfo 傳回之型別以外的資料類型傳回結果集資料。 在建立目錄函式的結果集時,驅動程式可能會使用資料來源不支援的資料類型。

資料行名稱 資料行

數值
資料類型 註解
TYPE_NAME (ODBC 2.0) 1 Varchar not Null 資料來源相依的資料類型名稱;例如,「CHAR()」、「VARCHAR()」、「MONEY」、「LONG VARBINARY」 或 「CHAR ( ) FOR BIT DATA」。 應用程式必須在 CREATE TABLE 和 ALTER TABLE 語句中使用 這個名稱。
DATA_TYPE (ODBC 2.0) 2 Smallint not Null SQL 資料類型。 這可以是 ODBC SQL 資料類型或驅動程式特定的 SQL 資料類型。 對於 datetime 或 interval 資料類型,此資料行會傳回精簡的資料類型(例如SQL_TYPE_TIME或SQL_INTERVAL_YEAR_TO_MONTH)。 如需有效的 ODBC SQL 資料類型清單,請參閱 附錄 D:資料類型中的 SQL 資料類型。 如需驅動程式特定 SQL 資料類型的相關資訊,請參閱驅動程式的檔。
COLUMN_SIZE (ODBC 2.0) 3 整數 伺服器支援此資料類型的資料行大小上限。 對於數值資料,這是最大有效位數。 對於字串資料,這是以字元為單位的長度。 對於 datetime 資料類型,這是字串表示的字元長度(假設小數秒陣列件允許的最大有效位數)。 如果資料行大小不適用,則會傳回 Null。 對於間隔資料類型,這是間隔常值字元表示中的字元數(如間隔前置精確度所定義;請參閱 附錄 D: 資料類型中的間隔資料類型長度 )。

如需資料行大小的詳細資訊,請參閱 附錄 D:資料類型中的資料行大小、十進位數、傳輸八位長度和顯示大小
LITERAL_PREFIX (ODBC 2.0) 4 Varchar 用來在常值前面加上的字元或字元;例如,字元資料類型的單引號 (') 或二進位資料類型的 0x;Null 會針對不適用常值前置詞的資料類型傳回。
LITERAL_SUFFIX (ODBC 2.0) 5 Varchar 用來終止常值的字元或字元;例如,字元資料類型的單引號 (') ;Null 會針對不適用常值尾碼的資料類型傳回。
CREATE_PARAMS (ODBC 2.0) 6 Varchar 關鍵字清單,以逗號分隔,對應至應用程式在使用 [TYPE_NAME] 欄位中傳回的名稱時,應用程式可以在括弧中指定的每個參數。 清單中的關鍵字可以是下列任一項:長度、有效位數或小數位數。 它們會以語法要求使用的順序出現。 例如,DECIMAL 的CREATE_PARAMS會是「precision,scale」;VARCHAR 的CREATE_PARAMS等於「length」。如果沒有資料類型定義的參數,則會傳回 Null;例如 INTEGER。

驅動程式會以使用所在國家/地區的語言提供CREATE_PARAMS文字。
NullABLE (ODBC 2.0) 7 Smallint not Null 資料類型是否接受 Null 值:

如果資料類型不接受 Null 值,SQL_NO_NullS。

如果資料類型接受 Null 值,SQL_NullABLE。

如果不知道資料行是否接受 Null 值,SQL_NullABLE_UNKNOWN。
CASE_SENSITIVE (ODBC 2.0) 8 Smallint not Null 字元資料類型在定序和比較中是否區分大小寫:

如果資料類型是字元資料類型且區分大小寫,SQL_TRUE。

如果資料類型不是字元資料類型或不區分大小寫,SQL_FALSE。
可搜尋 (ODBC 2.0) 9 Smallint not Null 在 WHERE 子句中使用 資料類型的方式:

如果資料行不能用於 WHERE 子句, SQL_PRED_NONE。 (這與 ODBC 2 中的SQL_UNSEARCHABLE值相同。 x .)

SQL_PRED_CHAR如果資料行可以在 WHERE 子句中使用 ,但只能搭配 LIKE 述詞使用。 (這與 ODBC 2 中的SQL_LIKE_ONLY值相同。 x .)

SQL_PRED_BASIC如果資料行可用於 WHERE 子句中 ,除了 LIKE 以外的所有比較運算子 (比較、量化比較、BETWEEN DISTINCT IN MATCH UNIQUE )。 (這與 ODBC 2 中的SQL_ALL_EXCEPT_LIKE值相同。 x .)

SQL_SEARCHABLE如果資料行可用於具有任何比較運算子的 WHERE 子句中。
UNSIGNED_ATTRIBUTE (ODBC 2.0) 10 Smallint 資料類型是否不帶正負號:

如果資料類型不帶正負號,SQL_TRUE。

如果資料類型已簽署,SQL_FALSE。

如果屬性不適用於資料類型或資料類型不是數值,則會傳回 Null。
FIXED_PREC_SCALE (ODBC 2.0) 11 Smallint not Null 資料類型是否具有預先定義的固定有效位數和小數位數(也就是資料來源特定的),例如 money 資料類型:

如果已預先定義固定有效位數和小數位數,SQL_TRUE。

如果它沒有預先定義的固定有效位數和小數位數,SQL_FALSE。
AUTO_UNIQUE_VALUE (ODBC 2.0) 12 Smallint 資料類型是否為自動遞增:

如果資料類型為自動遞增,SQL_TRUE。

如果資料類型不是自動遞增,SQL_FALSE。

如果屬性不適用於資料類型或資料類型不是數值,則會傳回 Null。

應用程式可以將值插入具有此屬性的資料行中,但通常無法更新資料行中的值。

在自動遞增資料行中插入時,會在插入時將唯一值插入資料行中。 未定義增量,但為數據源特定。 應用程式不應該假設自動遞增資料行會從任何特定點開始,或以任何特定值遞增。
LOCAL_TYPE_NAME (ODBC 2.0) 13 Varchar 資料類型資料來源相依名稱的當地語系化版本。 如果資料來源不支援當地語系化名稱,則會傳回 Null。 此名稱僅供顯示,例如在對話方塊中。
MINIMUM_SCALE (ODBC 2.0) 14 Smallint 資料來源上資料類型的最小小數位數。 如果資料類型具有固定小數位數,則MINIMUM_SCALE和MAXIMUM_SCALE資料行都包含這個值。 例如,SQL_TYPE_TIMESTAMP資料行可能有小數秒的固定小數位數。 Null 會在不適用小數位數的地方傳回。 如需詳細資訊,請參閱 附錄 D:資料類型中的資料行大小、十進位數、傳輸八位長度和顯示大小
MAXIMUM_SCALE (ODBC 2.0) 15 Smallint 資料來源上資料類型的最大小數位數。 Null 會在不適用小數位數的地方傳回。 如果未在資料來源上個別定義最大小數位數,而是定義為與最大精確度相同,則此資料行包含與COLUMN_SIZE資料行相同的值。 如需詳細資訊,請參閱 附錄 D:資料類型中的資料行大小、十進位數、傳輸八位長度和顯示大小
SQL_DATA_TYPE (ODBC 3.0) 16 Smallint NOT Null SQL 資料類型的值,因為它出現在描述元的SQL_DESC_TYPE欄位中。 此資料行與DATA_TYPE資料行相同,但間隔和日期時間資料類型除外。

對於 interval 和 datetime 資料類型,結果集中SQL_DATA_TYPE欄位會傳回SQL_INTERVAL或SQL_DATETIME,而SQL_DATETIME_SUB欄位會傳回特定間隔或 datetime 資料類型的子碼。 (請參閱 附錄 D:資料類型 。)
SQL_DATETIME_SUB (ODBC 3.0) 17 Smallint 當SQL_DATA_TYPE的值是SQL_DATETIME或SQL_INTERVAL時,這個資料行會包含 datetime/interval 副程式代碼。 對於 datetime 和 interval 以外的資料類型,此欄位為 Null。

對於 interval 或 datetime 資料類型,結果集中SQL_DATA_TYPE欄位會傳回SQL_INTERVAL或SQL_DATETIME,而SQL_DATETIME_SUB欄位會傳回特定間隔或 datetime 資料類型的子碼。 (請參閱 附錄 D:資料類型 。)
NUM_PREC_RADIX (ODBC 3.0) 18 整數 如果資料類型是近似數數值型別,這個資料行會包含值 2,指出COLUMN_SIZE指定一些位。 對於確切的數數值型別,此資料行包含值 10,表示COLUMN_SIZE指定十進位數。 否則,這個資料行就是 NULL。
INTERVAL_PRECISION (ODBC 3.0) 19 Smallint 如果資料類型是間隔資料類型,則此資料行會包含間隔前置精確度的值。 (請參閱 附錄 D:資料類型中的間隔資料類型有效位數 。)否則,此資料行為 Null。

屬性資訊可以套用至資料類型或結果集中的特定資料行。 SQLGetTypeInfo 會傳回與資料類型相關聯的屬性相關資訊; SQLColAttribute 會傳回與結果集中資料行相關聯之屬性的相關資訊。

如需下列資訊 請參閱
將緩衝區系結至結果集中的資料行 SQLBindCol 函式
取消語句處理 SQLCancel 函式
傳回結果集中資料行的相關資訊 SQLColAttribute 函式
擷取資料區塊或捲動結果集 SQLFetchScroll 函式
以正向方向擷取單一資料列或資料區塊 SQLFetch 函式
傳回驅動程式或資料來源的相關資訊 SQLGetInfo 函式

另請參閱

ODBC API 參考
ODBC 標頭檔