SQLForeignKeys 函式

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

摘要
SQLForeignKeys 可以傳回:

  • 指定資料表中的外鍵清單(指定資料表中參考其他資料表中主鍵的資料行)。

  • 參考指定資料表中主鍵之其他資料表中的外鍵清單。

驅動程式會將每個清單當做指定語句上的結果集傳回。

語法

  
SQLRETURN SQLForeignKeys(  
     SQLHSTMT       StatementHandle,  
     SQLCHAR *      PKCatalogName,  
     SQLSMALLINT    NameLength1,  
     SQLCHAR *      PKSchemaName,  
     SQLSMALLINT    NameLength2,  
     SQLCHAR *      PKTableName,  
     SQLSMALLINT    NameLength3,  
     SQLCHAR *      FKCatalogName,  
     SQLSMALLINT    NameLength4,  
     SQLCHAR *      FKSchemaName,  
     SQLSMALLINT    NameLength5,  
     SQLCHAR *      FKTableName,  
     SQLSMALLINT    NameLength6);  

引數

StatementHandle
[輸入]語句控制碼。

PKCatalogName
[輸入]主鍵資料表目錄名稱。 如果驅動程式支援某些資料表的目錄,但不支援其他資料表,例如當驅動程式從不同的 DBMS 擷取資料時,空字串 (「」) 表示沒有目錄的資料表。 PKCatalogName 不能包含字串搜尋模式。

如果SQL_ATTR_METADATA_ID語句屬性設定為 SQL_TRUE,PKCatalogName 會被視為識別碼, 而且其大小寫並不重要。 如果它是SQL_FALSE, PKCatalogName 是一般引數;它會以常值方式處理,而且其大小寫很重要。 如需詳細資訊,請參閱目錄函式中的引數

NameLength1
[輸入]* PKCatalogName 的長度,以字元為單位。

PKSchemaName
[輸入]主鍵資料表架構名稱。 如果驅動程式支援某些資料表的架構,但不支援其他資料表,例如當驅動程式從不同的 DBMS 擷取資料時,空字串 (「」) 表示沒有架構的資料表。 PKSchemaName 不能包含字串搜尋模式。

如果SQL_ATTR_METADATA_ID語句屬性設定為 SQL_TRUE,PKSchemaName 會被視為識別碼, 而且其大小寫並不重要。 如果它是SQL_FALSE, PKSchemaName 是一般引數;它會以常值方式處理,而且其大小寫很重要。

NameLength2
[輸入]* PKSchemaName 的長度,以字元為單位。

PKTableName
[輸入]主鍵資料表名稱。 PKTableName 不能包含字串搜尋模式。

如果 SQL_ATTR_METADATA_ID 語句屬性設定為 SQL_TRUE,PKTableName 會被視為識別碼, 而且其大小寫並不重要。 如果它是SQL_FALSE, PKTableName 是一般引數;它會以常值方式處理,而且其大小寫很重要。

NameLength3
[輸入]* PKTableName 的長度,以字元為單位。

FKCatalogName
[輸入]外鍵資料表目錄名稱。 如果驅動程式支援某些資料表的目錄,但不支援其他資料表,例如當驅動程式從不同的 DBMS 擷取資料時,空字串 (「」) 表示沒有目錄的資料表。 FKCatalogName 不能包含字串搜尋模式。

如果SQL_ATTR_METADATA_ID語句屬性設定為 SQL_TRUE,FKCatalogName 會被視為識別碼, 而且其大小寫並不重要。 如果它是SQL_FALSE, FKCatalogName 是一般引數;它會以字面方式處理,而且其大小寫很重要。

NameLength4
[輸入]* FKCatalogName 的長度,以字元為單位。

FKSchemaName
[輸入]外鍵資料表架構名稱。 如果驅動程式支援某些資料表的架構,但不支援其他資料表,例如當驅動程式從不同的 DBMS 擷取資料時,空字串 (「」) 表示沒有架構的資料表。 FKSchemaName 不能包含字串搜尋模式。

如果 SQL_ATTR_METADATA_ID 語句屬性設定為 SQL_TRUE,FKSchemaName 會被視為識別碼, 而且其大小寫並不重要。 如果它是SQL_FALSE, FKSchemaName 是一般引數;它會以字面方式處理,而且其大小寫很重要。

NameLength5
[輸入]* FKSchemaName 的長度,以字元為單位。

FKTableName
[輸入]外鍵資料表名稱。 FKTableName 不能包含字串搜尋模式。

如果SQL_ATTR_METADATA_ID語句屬性設定為 SQL_TRUE,FKTableName 會被視為識別碼, 而且其大小寫並不重要。 如果它是SQL_FALSE, FKTableName 是一般引數;它會以字面方式處理,而且其大小寫很重要。

NameLength6
[輸入]* FKTableName 的長度,以字元為單位。

傳回

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR或SQL_INVALID_HANDLE。

診斷

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

SQLSTATE 錯誤 描述
01000 一般警告 驅動程式特定的資訊訊息。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
08S01 通訊連結失敗 驅動程式與驅動程式連線的資料來源之間的通訊連結在函式完成處理之前失敗。
24000 不正確資料指標狀態 已開啟 StatementHandle 上的 資料指標,並 已呼叫 SQLFetch SQLFetchScroll 。 如果 SQLFetch 或 SQLFetchScroll 尚未傳回SQL_NO_DATA,而且如果 SQLFetch SQLFetchScroll 傳回SQL_NO_DATA,驅動程式就會傳回此錯誤。

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

呼叫函式,並在完成執行之前, 從多執行緒應用程式中的不同執行緒呼叫 語句Handle 或 SQLCancelHandle
HY009 不正確 Null 指標使用 (DM) PKTableName FKTableName 引數都是 Null 指標。

SQL_ATTR_METADATA_ID語句屬性已設定為 SQL_TRUE、 FKCatalogName PKCatalogName 引數為 null 指標,且 SQL_CATALOG_NAME InfoType 會傳回支援目錄名稱。

(DM) SQL_ATTR_METADATA_ID語句屬性已設定為 SQL_TRUE,而 FKSchemaName、 PKSchemaName FKTableName PKTableName 引數為 null 指標。
HY010 函式順序錯誤 (DM) 已針對與 StatementHandle 相關聯的連接控制碼呼叫非同步執行函式。 呼叫 SQLForeignKeys 函式時,這個非同步函式仍在執行中。

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

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

(DM) 已針對 StatementHandle 呼叫 SQLExecute SQLExecDirect SQLBulkOperations SQLSetPos ,並傳回SQL_NEED_DATA。 在針對所有資料執行中參數或資料行傳送資料之前,會呼叫此函式。
HY013 記憶體管理錯誤 無法處理函式呼叫,因為基礎記憶體物件無法存取,可能是因為記憶體不足的情況。
HY090 不正確字串或緩衝區長度 (DM) 其中一個名稱長度引數的值小於 0,但不等於SQL_NTS。
其中一個名稱長度引數的值超過對應名稱的最大長度值。 (請參閱「批註」。)
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 ,才能執行後續處理並完成作業。

註解

如需如何使用此函式傳回的資訊的相關資訊,請參閱 目錄資料的 使用方式。

如果 * PKTableName 包含資料表名稱, SQLForeignKeys 會傳回結果集,其中包含指定資料表的主鍵,以及參考它的所有外鍵。 其他資料表中的外鍵清單不包含指向指定資料表中唯一條件約束的外鍵。

如果 * FKTableName 包含資料表名稱, SQLForeignKeys 會傳回結果集,其中包含指定資料表中指向其他資料表中主鍵的所有外鍵,以及它們所參考之其他資料表的主鍵。 指定資料表中的外鍵清單不包含參考其他資料表中唯一條件約束的外鍵。

如果 *PKTableName 和 * FKTableName 包含資料表名稱, SQLForeignKeys 會傳回 *FKTableName 中所指定資料表中的外鍵,該外鍵參照 * PKTableName 中指定的資料表主鍵。 這應該是最多一個索引鍵。

注意

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

SQLForeignKeys 會以標準結果集的形式傳回結果。 如果要求與主鍵相關聯的外鍵,結果集會依FKTABLE_CAT、FKTABLE_SCHEM、FKTABLE_NAME和KEY_SEQ排序。 如果要求與外鍵相關聯的主鍵,結果集會依PKTABLE_CAT、PKTABLE_SCHEM、PKTABLE_NAME和KEY_SEQ排序。 下表列出結果集中的資料行。

資料表中不會顯示 VARCHAR 資料行的長度;實際長度取決於資料來源。 若要判斷PKTABLE_CAT或FKTABLE_CAT、PKTABLE_SCHEM或FKTABLE_SCHEM、PKTABLE_NAME或FKTABLE_NAME,以及PKCOLUMN_NAME或FKCOLUMN_NAME資料行的實際長度,應用程式可以使用SQL_MAX_CATALOG_NAME_LEN、SQL_MAX_SCHEMA_NAME_LEN、SQL_MAX_TABLE_NAME_LEN和SQL_MAX_COLUMN_NAME_LEN選項來呼叫 SQLGetInfo

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

ODBC 2.0 資料行 ODBC 3*.x* 資料行
PKTABLE_QUALIFIER PKTABLE_CAT
PKTABLE_OWNER PKTABLE_SCHEM
FKTABLE_QUALIFIER FK_TABLE_CAT
FKTABLE_OWNER FKTABLE_SCHEM

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

資料行名稱 Column number 資料類型 註解
PKTABLE_CAT (ODBC 1.0) 1 Varchar 主鍵資料表目錄名稱;如果不適用於資料來源,則為 Null。 如果驅動程式支援某些資料表的目錄,但不支援其他資料表,例如當驅動程式從不同的 DBMS 擷取資料時,它會針對沒有目錄的資料表傳回空字串 (「」)。
PKTABLE_SCHEM (ODBC 1.0) 2 Varchar 主鍵資料表架構名稱;如果不適用於資料來源,則為 Null。 如果驅動程式支援某些資料表的架構,但不支援其他資料表,例如當驅動程式從不同的 DBMS 擷取資料時,它會針對沒有架構的資料表傳回空字串 (「」)。
PKTABLE_NAME (ODBC 1.0) 3 Varchar not Null 主鍵資料表名稱。
PKCOLUMN_NAME (ODBC 1.0) 4 Varchar not Null 主鍵資料行名稱。 驅動程式會針對沒有名稱的資料行傳回空字串。
FKTABLE_CAT (ODBC 1.0) 5 Varchar 外鍵資料表目錄名稱;如果不適用於資料來源,則為 Null。 如果驅動程式支援某些資料表的目錄,但不支援其他資料表,例如當驅動程式從不同的 DBMS 擷取資料時,它會針對沒有目錄的資料表傳回空字串 (「」)。
FKTABLE_SCHEM (ODBC 1.0) 6 Varchar 外鍵資料表架構名稱;如果不適用於資料來源,則為 Null。 如果驅動程式支援某些資料表的架構,但不支援其他資料表,例如當驅動程式從不同的 DBMS 擷取資料時,它會針對沒有架構的資料表傳回空字串 (「」)。
FKTABLE_NAME (ODBC 1.0) 7 Varchar not Null 外鍵資料表名稱。
FKCOLUMN_NAME (ODBC 1.0) 8 Varchar not Null 外鍵資料行名稱。 驅動程式會針對沒有名稱的資料行傳回空字串。
KEY_SEQ (ODBC 1.0) 9 Smallint not Null 索引鍵中的資料行序號(從 1 開始)。
UPDATE_RULE (ODBC 1.0) 10 Smallint 當 SQL 作業為 UPDATE 時,要套用至外鍵的動作。 可以有下列其中一個值。 (參考資料表是具有主鍵的資料表;參考資料表是具有外鍵的資料表。

SQL_CASCADE:當參考資料表的主鍵更新時,參考資料表的外鍵也會更新。

SQL_NO_ACTION:如果參考資料表的主鍵更新會導致參考資料表中的「懸空參考」(也就是說,參考資料表中的資料列在參考資料表中沒有任何對應專案),則會拒絕更新。 如果參考資料表的外鍵更新將引入不存在為所參考資料表之主鍵值的值,則會拒絕更新。 (此動作與 ODBC 2*.x*中的SQL_RESTRICT動作相同)

SQL_SET_Null:當參考資料表中的一或多個資料列以變更主鍵的一或多個元件的方式更新時,參考資料表中對應至主鍵變更元件之外鍵的元件會在參考資料表的所有相符資料列中設定為 Null。

SQL_SET_DEFAULT:當參考資料表中的一或多個資料列以變更主鍵的一或多個元件的方式更新時,參考資料表中對應至主鍵變更元件之外鍵的元件會設定為參考資料表中所有相符資料列中適用的預設值。

如果不適用於資料來源,則為 Null。
DELETE_RULE (ODBC 1.0) 11 Smallint 當 SQL 作業為 DELETE 時,要套用至外鍵的動作。 可以有下列其中一個值。 (參考資料表是具有主鍵的資料表;參考資料表是具有外鍵的資料表。

SQL_CASCADE:刪除參考資料表中的資料列時,也會刪除參考資料表中的所有相符資料列。

SQL_NO_ACTION:如果刪除參考資料表中的資料列會導致參考資料表中的「懸空參考」(也就是說,參考資料表中的資料列在參考資料表中沒有任何對應專案),則會拒絕更新。 (此動作與 ODBC 2*.x*中的SQL_RESTRICT動作相同)

SQL_SET_Null:刪除參考資料表中的一或多個資料列時,參考資料表之外鍵的每個元件都會在參考資料表的所有相符資料列中設定為 Null。

SQL_SET_DEFAULT:刪除參考資料表中的一或多個資料列時,參考資料表之外鍵的每個元件都會設定為參考資料表的所有相符資料列中適用的預設值。

如果不適用於資料來源,則為 Null。
FK_NAME (ODBC 2.0) 12 Varchar 外鍵名稱。 如果不適用於資料來源,則為 Null。
PK_NAME (ODBC 2.0) 13 Varchar 主鍵名稱。 如果不適用於資料來源,則為 Null。
DEFERRABILITY (ODBC 3.0) 14 Smallint SQL_INITIALLY_DEFERRED、SQL_INITIALLY_IMMEDIATE、SQL_NOT_DEFERRABLE。

程式碼範例

如下表所示,此範例使用三個數據表,名為 ORDERS、LINES 和 CUSTOMERS。

訂單 客戶
ORDERID ORDERID CUSTID
CUSTID 名稱
OPENDATE PARTID 地址
售貨員 QUANTITY 手機
狀態

在 ORDERS 資料表中,CUSTID 會識別銷售的目標客戶。 這是參考 CUSTOMERS 資料表中 CUSTID 的外鍵。

在 LINES 資料表中,ORDERID 會識別與明細專案相關聯的銷售訂單。 這是參考 ORDERS 資料表中 ORDERID 的外鍵。

此範例會呼叫 SQLPrimaryKeys 來取得 ORDERS 資料表的主鍵。 結果集會有一個資料列;下表顯示重要資料行。

TABLE_NAME COLUMN_NAME KEY_SEQ
訂單 ORDERID 1

接下來,此範例會呼叫 SQLForeignKeys ,以取得參考 ORDERS 資料表主鍵之其他資料表中的外鍵。 結果集會有一個資料列;下表顯示重要資料行。

PKTABLE_NAME PKCOLUMN_NAME FKTABLE_NAME FKCOLUMN_NAME KEY_SEQ
訂單 CUSTID CUSTID 1

最後,此範例會呼叫 SQLForeignKeys ,以取得 ORDERS 資料表中參考其他資料表主鍵的外鍵。 結果集會有一個資料列;下表顯示重要資料行。

PKTABLE_NAME PKCOLUMN_NAME FKTABLE_NAME FKCOLUMN_NAME KEY_SEQ
客戶 CUSTID 訂單 CUSTID 1
#define TAB_LEN SQL_MAX_TABLE_NAME_LEN + 1  
#define COL_LEN SQL_MAX_COLUMN_NAME_LEN + 1  
  
LPSTR   szTable;              /* Table to display */  
  
UCHAR szPkTable[TAB_LEN];   /* Primary key table name */  
UCHAR szFkTable[TAB_LEN];   /* Foreign key table name */  
UCHAR szPkCol[COL_LEN];     /* Primary key column */  
UCHAR szFkCol[COL_LEN];     /* Foreign key column */  
  
SQLHSTMT      hstmt;  
SQLINTEGER    cbPkTable, cbPkCol, cbFkTable, cbFkCol, cbKeySeq;  
SQLSMALLINT   iKeySeq;  
SQLRETURN     retcode;  
  
// Bind the columns that describe the primary and foreign keys.  
// Ignore the table schema, name, and catalog for this example.  
  
SQLBindCol(hstmt, 3, SQL_C_CHAR, szPkTable, TAB_LEN, &cbPkTable);  
SQLBindCol(hstmt, 4, SQL_C_CHAR, szPkCol, COL_LEN, &cbPkCol);  
SQLBindCol(hstmt, 5, SQL_C_SSHORT, &iKeySeq, TAB_LEN, &cbKeySeq);  
SQLBindCol(hstmt, 7, SQL_C_CHAR, szFkTable, TAB_LEN, &cbFkTable);  
SQLBindCol(hstmt, 8, SQL_C_CHAR, szFkCol, COL_LEN, &cbFkCol);  
  
strcpy_s(szTable, sizeof(szTable), "ORDERS");  
  
/* Get the names of the columns in the primary key. */  
  
retcode = SQLPrimaryKeys(hstmt,  
         NULL, 0,             /* Catalog name */  
         NULL, 0,             /* Schema name */  
         szTable, SQL_NTS);   /* Table name */  
  
while ((retcode == SQL_SUCCESS) || (retcode == SQL SUCCESS_WITH_INFO)) {  
  
   /* Fetch and display the result set. This will be a list of the */  
   /* columns in the primary key of the ORDERS table. */  
  
   retcode = SQLFetch(hstmt);  
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)  
      fprintf(out, "Table: %s Column: %s Key Seq: %hd \n", szPkTable, szPkCol,  
      iKeySeq);  
}  
  
/* Close the cursor (the hstmt is still allocated). */  
  
SQLFreeStmt(hstmt, SQL_CLOSE);  
  
/* Get all the foreign keys that refer to ORDERS primary key.*/   
  
retcode = SQLForeignKeys(hstmt,  
         NULL, 0,            /* Primary catalog */  
         NULL, 0,            /* Primary schema */  
         szTable, SQL_NTS,   /* Primary table */  
         NULL, 0,            /* Foreign catalog */  
         NULL, 0,            /* Foreign schema */  
         NULL, 0);           /* Foreign table */  
  
while ((retcode == SQL_SUCCESS) || (retcode == SQL_SUCCESS_WITH_INFO)) {  
  
/* Fetch and display the result set. This will be all of the */  
/* foreign keys in other tables that refer to the ORDERS */  
/* primary key. */  
  
   retcode = SQLFetch(hstmt);  
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)  
      fprintf(out, "%-s ( %-s ) <-- %-s ( %-s )\n", szPkTable,  
               szPkCol, szFkTable, szFkCol);  
}  
  
/* Close the cursor (the hstmt is still allocated). */  
  
SQLFreeStmt(hstmt, SQL_CLOSE);  
  
/* Get all the foreign keys in the ORDERS table. */  
  
retcode = SQLForeignKeys(hstmt,  
         NULL, 0,             /* Primary catalog */  
         NULL, 0,             /* Primary schema */  
         NULL, 0,             /* Primary table */  
         NULL, 0,             /* Foreign catalog */  
         NULL, 0,             /* Foreign schema */  
         szTable, SQL_NTS);   /* Foreign table */  
  
while ((retcode == SQL_SUCCESS) || (retcode == SQL_SUCCESS_WITH_INFO)) {  
  
/* Fetch and display the result set. This will be all of the */  
/* primary keys in other tables that are referred to by foreign */  
/* keys in the ORDERS table. */  
  
   retcode = SQLFetch(hstmt);  
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)  
      fprintf(out, "%-s ( %-s )--> %-s ( %-s )\n", szFkTable, szFkCol, szPkTable, szPkCol);  
}  
  
/* Free the hstmt. */  
SQLFreeStmt(hstmt, SQL_DROP);  
如需下列資訊 請參閱
將緩衝區系結至結果集中的資料行 SQLBindCol 函式
取消語句處理 SQLCancel 函式
以正向方向擷取單一資料列或資料區塊 SQLFetch 函式
擷取資料區塊或捲動結果集 SQLFetchScroll 函式
傳回主鍵的資料行 SQLPrimaryKeys 函式
傳回資料表統計資料和索引 SQLStatistics 函式

另請參閱

ODBC API 參考
ODBC 標頭檔