SQLColumnPrivileges 函式

符合性
推出版本:ODBC 1.0 標準合規性:ODBC

總結
SQLColumnPrivileges 會回傳指定資料表的欄位清單及相關權限。 驅動程式會將資訊以指定 StatementHandle 的結果集形式回傳。

Syntax

  
SQLRETURN SQLColumnPrivileges(  
     SQLHSTMT      StatementHandle,  
     SQLCHAR *     CatalogName,  
     SQLSMALLINT   NameLength1,  
     SQLCHAR *     SchemaName,  
     SQLSMALLINT   NameLength2,  
     SQLCHAR *     TableName,  
     SQLSMALLINT   NameLength3,  
     SQLCHAR *     ColumnName,  
     SQLSMALLINT   NameLength4);  

Arguments

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 字元長度。

ColumnName
[輸入]欄位名稱的字串搜尋模式。

若SQL_ATTR_METADATA_ID語句屬性設為 SQL_TRUE,ColumnName 被視為識別碼,其大小寫不重要。 如果是 SQL_FALSE,ColumnName 是一個模式值參數;它被字面上處理,且其案例意義重大。

NameLength4
[輸入]*欄位名稱的字元長度。

Returns

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR或SQL_INVALID_HANDLE。

Diagnostics

SQLColumnPrivileges 回傳 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 時,可以透過呼叫 SQLGetDiagRec 取得對應的 SQLSTATE 值,並將 HandleType 設為 SQL_HANDLE_STMT,Handle 為 StatementHandle 下表列出 SQLColumnPrivileges 常回傳的 SQLSTATE 值,並在此函式情境下說明每個值;「(DM)」符號會置於驅動程式管理器回傳的 SQLSTATE 描述前。 除非另有說明,否則與每個 SQLSTATE 值相關聯的傳回碼會SQL_ERROR。

SQLSTATE 錯誤 Description
01000 一般警告 驅動程式特定的資訊訊息。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
08S01 通訊連結故障 驅動程式與驅動程式連線的數據源之間的通訊連結在函式完成處理之前失敗。
24000 無效的數據指標狀態 StatementHandle 上開啟游標,並呼叫了 SQLFetchSQLFetchScroll。 如果 SQLFetch 或 SQLFetchScroll 尚未傳回SQL_NO_DATA,而且如果 SQLFetch SQLFetchScroll 傳回SQL_NO_DATA,驅動程式就會傳回此錯誤。

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

呼叫函式,並在完成執行之前,從多線程應用程式中的不同線程呼叫語句Handle 或 SQLCancelHandle
HY009 無效的 Null 指標使用 TableName 參數是空指標。

SQL_ATTR_METADATA_ID 陳述屬性設為 SQL_TRUE,CatalogName 參數為空指標,SQL_CATALOG_NAME InfoType 回傳支援目錄名稱。

(DM) SQL_ATTR_METADATA_ID 陳述式屬性設為 SQL_TRUE,SchemaNameColumnName 參數為空指標。
HY010 函式順序錯誤 (DM) 已針對與 StatementHandle 相關聯的連接句柄呼叫異步執行函式。 當呼叫這個函式時,這個非同步函式仍在執行中。

(DM) 已針對 StatementHandle 呼叫 SQLExecuteSQLExecDirectSQLMoreResults,並傳回SQL_PARAM_DATA_AVAILABLE。 在擷取所有數據流參數的數據之前,會呼叫此函式。

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

(DM) 已針對 StatementHandle 呼叫 SQLExecuteSQLExecDirectSQLBulkOperationsSQLSetPos,並傳回SQL_NEED_DATA。 在針對所有數據執行中參數或數據行傳送數據之前,會呼叫此函式。
HY013 記憶體管理錯誤 無法處理函式呼叫,因為基礎記憶體物件無法存取,可能是因為記憶體不足的情況。
HY090 無效的字串或緩衝區長度 (DM) 其中一個名稱長度參數的值小於 0,但不等於 SQL_NTS。
其中一個名稱長度參數的值超過了對應名稱的最大長度值。 (參見「評論」)
HY117 聯機因為未知的交易狀態而暫停。 只允許中斷連線和唯讀函式。 (DM) 如需暫停狀態的詳細資訊,請參閱 SQLEndTran 函式
HYC00 未實作選擇性功能 指定了目錄名稱,驅動程式或資料來源不支援目錄。

已指定結構名稱,驅動程式或資料來源不支援結構。

欄位名稱指定了字串搜尋模式,但資料來源不支援該參數的搜尋模式。

驅動程式或資料來源不支援目前SQL_CONCURRENCY與SQL_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 ,才能執行後續處理並完成作業。

評論

SQLColumnPrivileges 會以標準結果集的形式回傳結果,依照 TABLE_CAT、TABLE_SCHEM、TABLE_NAME、COLUMN_NAME 和 PRIVILEGE 排序。

備註

SQLColumnPrivileges 可能不會回傳所有欄位的權限。 例如,驅動程式可能不會回傳偽欄位(如 Oracle ROWID)的權限資訊。 應用程式可以使用任何有效的欄位,不論該欄位是否由 SQLColumnPrivileges 回傳。

VARCHAR 欄位的長度未在表格中顯示;實際長度取決於資料來源。 為了確定CATALOG_NAME、SCHEMA_NAME、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 選項。

備註

欲了解更多關於 ODBC 目錄函式的一般用途、參數及回傳資料,請參見 目錄函式。

以下欄位已更名為 ODBC 3。x。 欄位名稱的變更不會影響向下相容性,因為應用程式是以欄位編號綁定的。

ODBC 2.0 欄位 ODBC 3。x
TABLE_QUALIFIER (表格限定詞) TABLE_CAT
表擁有者 TABLE_SCHEM

下表列出結果集中的欄位。 驅動程式可定義第 8 欄(IS_GRANTABLE)之外的其他欄位。 應用程式應透過從結果集末端倒數而非指定明確序數位置,來取得驅動程式專屬欄位的存取權。 欲了解更多資訊,請參閱 目錄函數回傳的資料

欄位名稱 欄號 資料類型 評論
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 欄位名稱。 驅動程式會回傳一個沒有名稱的欄位的空字串。
GRANTOR(ODBC 1.0) 5 Varchar 授予權限的使用者姓名;若不適用於資料來源,則使用 NULL。

對於所有 GRANTEE 欄位中值為物件擁有者的資料列,GRANTOR 欄位將是「_SYSTEM」。
受讓人(ODBC 1.0) 6 Varchar 不是 NULL 授予該權限的使用者姓名。
特權(ODBC 1.0) 7 Varchar 不是 NULL 識別欄位特權。 可能是以下其中一種(或在實作定義時資料來源支持的其他選項):

SELECT:受授權方可取得該欄位的資料。

INSERT:受贈方可在新插入的資料表中提供欄位資料。

UPDATE:受讓人可更新欄位中的資料。

參考:受贈者可在限制條件下(例如唯一、參照或表格檢查限制)中引用欄位。
IS_GRANTABLE(ODBC 1.0) 8 Varchar 表示受讓人是否被允許將該權利授予其他使用者;若資料來源未知或不適用,則「是」、「否」或「NULL」。

特權要麼是可授予,要麼不可授予,但不能兩者兼具。 SQLColumnPrivileges 回傳的結果集中,除了 IS_GRANTABLE 欄外,所有欄位值都不相同的兩列。

程式代碼範例

類似函式的程式碼範例請參見 SQLColumns 函式

如需有關 看!
將緩衝區系結至結果集中的數據行 SQLBindCol 函式
取消語句處理 SQLCancel 函式
在表格中回傳欄位 SQLColumns 函式
擷取數據區塊或捲動結果集 SQLFetchScroll 函式
擷取多個數據列 SQLFetch 函式
資料表的回傳權限 SQLTablePrivileges 函式
回傳資料來源中的表格列表 SQLTables 函式