符合性
推出版本:ODBC 1.0 標準合規性:ODBC
總結
SQLPrimaryKeys 回傳構成資料表主鍵的欄位名稱。 驅動程式會將信息當做結果集傳回。 此函式不支援在單一呼叫中從多個資料表回傳主鍵。
Syntax
SQLRETURN SQLPrimaryKeys(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3);
論點
StatementHandle
[輸入]語句句柄。
目錄名稱
[輸入]目錄名稱。 若驅動程式支援某些資料表的目錄,但不支援其他資料表,例如當驅動從不同資料庫管理系統(DBMS)取得資料時,空字串(“”)表示那些沒有目錄的資料表。
目錄名稱 不能包含字串搜尋模式。
若SQL_ATTR_METADATA_ID語句屬性設為 SQL_TRUE,目錄 名稱 被視為識別碼,其大小寫不重要。 如果是SQL_FALSE,目錄 名稱 是一個普通的參數;它被字面上處理,且其案例意義重大。 如需詳細資訊,請參閱目錄函式中的引數。
名稱長度1
[輸入]*目錄名稱的字元長度。
結構描述名稱
[輸入]模式名稱。 如果驅動程式支援某些資料表的結構,但不支援其他資料表,例如當驅動從不同資料庫管理系統(DBMS)取得資料時,空字串(“”)表示那些沒有結構的資料表。
SchemaName 不能包含字串搜尋模式。
若SQL_ATTR_METADATA_ID語句屬性設為 SQL_TRUE,SchemaName 被視為識別碼,其情況不重要。 如果是 SQL_FALSE,SchemaName 是一個普通參數;它被字面處理,且其案例並不重要。
名稱長度2
[輸入]*SchemaName.
TableName
[輸入]桌名。 此參數不可能是空指標。
TableName 不能包含字串搜尋模式。
若 SQL_ATTR_METADATA_ID 陳述句屬性設為 SQL_TRUE,TableName 被視為識別碼,其大小寫不具意義。 如果是 SQL_FALSE,TableName 就是普通參數;它被字面處理,且其案例並不重要。
名稱長度3
[輸入]*TableName 字元長度。
Returns
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR或SQL_INVALID_HANDLE。
Diagnostics
當 SQLPrimaryKeys 回傳 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 時,可以透過呼叫 SQLGetDiagRec 取得 HandleType 為 SQL_HANDLE_STMT 與 Handle 為 StatementHandle 的 Handle,從而取得相應的 SQLSTATE 值。 下表列出 SQLPrimaryKeys 常回傳的 SQLSTATE 值,並在此函式的情境中逐一說明;「(DM)」符號會置於驅動程式管理器回傳的 SQLSTATE 描述前。 除非另有說明,否則與每個 SQLSTATE 值相關聯的傳回碼會SQL_ERROR。
| SQLSTATE | 錯誤 | 說明 |
|---|---|---|
| 01000 | 一般警告 | 驅動程式特定的資訊訊息。 (函式會傳回SQL_SUCCESS_WITH_INFO。) |
| 08S01 | 通訊連結故障 | 驅動程式與驅動程式連線的數據源之間的通訊連結在函式完成處理之前失敗。 |
| 24000 | 無效的數據指標狀態 | (DM) 語句上已開啟數據指標,並已呼叫 SQLFetch 或 SQLFetchScroll。 StatementHandle 上開啟游標,但尚未呼叫 SQLFetch 或 SQLFetchScroll。 |
| 40001 | 串行化失敗 | 交易因為與另一個交易發生資源死結而回復。 |
| 40003 | 語句完成未知 | 此函式執行期間相關聯的連接失敗,且無法判斷交易的狀態。 |
| HY000 | 一般誤差 | 發生錯誤,其中沒有特定的 SQLSTATE,也沒有定義任何實作特定的 SQLSTATE。 *MessageText 緩衝區中 SQLGetDiagRec 傳回的錯誤訊息描述錯誤及其原因。 |
| HY001 | 記憶體配置錯誤 | 驅動程式無法配置支援執行或完成函式所需的記憶體。 |
| HY008 | 行動取消 | 已針對 StatementHandle 啟用異步處理。 已呼叫函式,並在完成執行之前,在 StatementHandle 上呼叫 SQLCancel 或 SQLCancelHandle。 然後在 StatementHandle 上再次呼叫函式。 呼叫函式,並在完成執行之前,從多線程應用程式中的不同線程呼叫語句Handle 或 SQLCancelHandle。 |
| HY009 | 無效的 Null 指標使用 | (DM) TableName 參數是一個空指標。 SQL_ATTR_METADATA_ID 陳述式屬性設為 SQL_TRUE,CatalogName 參數為空指標,且 SQLGetInfo SQL_CATALOG_NAME資訊類型回傳支援目錄名稱。 (DM) SQL_ATTR_METADATA_ID 陳述句屬性設為 SQL_TRUE,SchemaName 參數為空指標。 |
| HY010 | 函式順序錯誤 | (DM) 已針對與 StatementHandle 相關聯的連接句柄呼叫異步執行函式。 當呼叫 SQLPrimaryKeys 函式時,這個非同步函式仍在執行中。 (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 ,才能執行後續處理並完成作業。 |
評論
SQLPrimaryKeys 以標準結果集的形式回傳結果,依TABLE_CAT、TABLE_SCHEM、TABLE_NAME 和 KEY_SEQ 排序。 關於這些資訊如何被使用,請參閱 目錄資料的用途。
以下欄位已更名為 ODBC 3。x。 欄位名稱的變更不會影響向下相容性,因為應用程式是以欄位編號綁定的。
| ODBC 2.0 欄位 | ODBC 3。x 欄 |
|---|---|
| TABLE_QUALIFIER (表格限定詞) | TABLE_CAT |
| 表擁有者 | TABLE_SCHEM |
要確定TABLE_CAT、TABLE_SCHEM、TABLE_NAME和COLUMN_NAME欄位的實際長度,請呼叫 SQLGetInfo ,並提供SQL_MAX_CATALOG_NAME_LEN、SQL_MAX_SCHEMA_NAME_LEN、SQL_MAX_TABLE_NAME_LEN 和 SQL_MAX_COLUMN_NAME_LEN 選項。
Note
欲了解更多關於 ODBC 目錄函式的一般用途、參數及回傳資料,請參見 目錄函式。
下表列出結果集中的欄位。 驅動程式可定義第 6 欄(PK_NAME)以外的額外欄位。 應用程式應透過從結果集末端倒數而非指定明確序數位置,來取得驅動程式專屬欄位的存取權。 欲了解更多資訊,請參閱 目錄函數回傳的資料。
| 欄位名稱 | 欄號 | 資料類型 | 評論 |
|---|---|---|---|
| TABLE_CAT(ODBC 1.0) | 1 | Varchar | 主鍵表目錄名稱;若不適用於資料來源,則使用 NULL。 如果驅動程式支援某些資料表的目錄,但不支援其他資料表,例如當驅動從不同資料庫管理系統(DBMS)取得資料時,對於沒有目錄的資料表,則會回傳一個空字串(「」)。 |
| TABLE_SCHEM(ODBC 1.0) | 2 | Varchar | 主鍵表結構名稱;若不適用於資料來源,則使用 NULL。 如果驅動程式支援某些資料表的結構,但不支援其他資料表,例如當驅動從不同資料庫管理系統(DBMS)取得資料時,對於沒有結構的資料表,則會回傳一個空字串(「」)。 |
| TABLE_NAME(ODBC 1.0) | 3 | Varchar 不是 NULL | 主鍵資料表名稱。 |
| COLUMN_NAME(ODBC 1.0) | 4 | Varchar 不是 NULL | 主鍵欄位名稱。 驅動程式會回傳一個沒有名稱的欄位的空字串。 |
| KEY_SEQ(ODBC 1.0) | 5 | Smallint 不是 NULL | 欄位序號按鍵(以 1 開頭)。 |
| PK_NAME(ODBC 2.0) | 6 | Varchar | 主鍵名稱。 若不適用於資料來源,則使用 NULL。 |
程式碼範例
請參見 SQLForeignKeys。
相關函數
| 如需相關信息 | 看! |
|---|---|
| 將緩衝區系結至結果集中的數據行 | SQLBindCol 函式 |
| 取消語句處理 | SQLCancel 函式 |
| 擷取數據區塊或捲動結果集 | SQLFetchScroll 函式 |
| 以僅向前向的方向擷取單一列或資料區塊 | SQLFetch 函式 |
| 返回外鍵欄位 | SQLForeignKeys 函式 |
| 回傳表格統計與指數 | SQLStatistics 函式 |