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
[输入]语句句柄。

CatalogName
[输入]目录名称。 如果驱动程序支持某些目录的名称,而不支持其他目录,例如当驱动程序从不同的数据库管理系统(DBMS)获取数据时,空字符串(“”)表示那些没有名称的目录。 目录名称 不能包含字符串搜索模式。

如果SQL_ATTR_METADATA_ID语句属性设置为SQL_TRUE,目录 被视为标识符,其大小写不重要。 如果是SQL_FALSE,目录 名称 是一个普通的论证;它被字面处理,且其案例意义重大。 有关详细信息,请参阅目录函数中的参数

NameLength1
[输入]*目录名称字符长度。

SchemaName
[输入]架构名称。 如果驱动程序支持某些表的模式,而不支持其他表,例如当驱动程序从不同数据库管理系统(DBMS)检索数据时,空字符串(“”)表示那些没有模式的表。 SchemaName 不能包含字符串搜索模式。

如果SQL_ATTR_METADATA_ID语句属性设置为 SQL_TRUE,SchemaName 被视为标识符。 如果是 SQL_FALSE,SchemaName 是一个普通参数;它被字面处理,且其案例意义重大。

NameLength2
[输入]*SchemaName字符长度。

TableName
[输入]表名。 该论证不可能是空指针。 TableName 不能包含字符串搜索模式。

如果SQL_ATTR_METADATA_ID语句属性设置为 SQL_TRUE,TableName 被视为标识符,其大小写不重要。 如果是SQL_FALSE,则 TableName 是一个普通参数;它被字面处理,且其案例意义重大。

NameLength3
[输入]*TableName字符长度。

ColumnName
[输入]列名的字符串搜索模式。

如果SQL_ATTR_METADATA_ID语句属性设置为 SQL_TRUE,ColumnName 被视为标识符,其判例不重要。 如果是 SQL_FALSE,ColumnName 是一个模式值参数;它被字面处理,且其案例意义重大。

NameLength4
[输入]*ColumnName的字符长度。

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 值,Handle 为 SQL_HANDLE_STMT,Handle 为 StatementHandle 下表列出 了SQLColumnPrivileges 通常返回的SQLSTATE值,并在此函数的上下文中解释了每个值;“(DM)” 符号位于驱动程序管理器返回的 SQLSTATE 描述之前。 除非另有说明,否则与每个 SQLSTATE 值关联的返回代码SQL_ERROR。

SQLSTATE Error Description
01000 常规警告 特定于驱动程序的信息性消息。 (函数返回SQL_SUCCESS_WITH_INFO。)
08S01 通信链接失败 驱动程序与驱动程序连接到的数据源之间的通信链接在函数完成处理之前失败。
24000 游标状态无效 StatementHandle 上打开了一个光标,调用了 SQLFetchSQLFetchScroll。 如果 SQLFetch 或 SQLFetchScroll 未返回SQL_NO_DATA,并且如果 SQLFetchSQLFetchScroll 返回SQL_NO_DATA,驱动程序将返回此错误。

StatementHandle 上开着光标,但未调用 SQLFetchSQLFetchScroll
40001 序列化失败 由于资源死锁与另一个事务,事务已回滚。
40003 语句完成未知 执行此函数期间关联的连接失败,无法确定事务的状态。
HY000 常规错误 发生错误:没有特定的 SQLSTATE,也没有定义特定于实现的 SQLSTATE。 *MessageText 缓冲区中 SQLGetDiagRec 返回的错误消息描述错误及其原因。
HY001 内存分配错误 驱动程序无法分配支持执行或完成函数所需的内存。
HY008 操作已取消 StatementHandle 启用了异步处理。 调用了该函数,在完成执行之前,对 StatementHandle 调用了 SQLCancel 或 SQLCancelHandle。 然后,在 StatementHandle再次调用该函数。

调用了函数,在完成执行之前,SQLCancel 或 SQLCancelHandle 从多线程应用程序中的不同线程调用 StatementHandle
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列的实际长度,应用程序可以调用带有SQL_MAX_CATALOG_NAME_LEN、SQL_MAX_SCHEMA_NAME_LEN、SQL_MAX_TABLE_NAME_LEN和SQL_MAX_COLUMN_NAME_LEN选项的 SQLGetInfo

注释

有关 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。 如果驱动程序支持某些表的目录,但不支持其他表,例如当驱动程序从不同数据库管理系统检索数据时,对于没有目录的表,驱动程序会返回一个空字符串(“”)。
TABLE_SCHEM(ODBC 1.0) 2 Varchar 模式标识符;如果不适用于数据源,则使用NULL。 如果驱动程序支持某些表的模式,而不支持其他表,例如当驱动程序从不同数据库管理系统检索数据时,对于没有模式的表,驱动程序会返回一个空字符串(“”)。
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 表示受让人是否被允许将该特权授予其他用户;如果数据源未知或不适用,则“是”、“否”或“空”。

特权要么可授予,要么不可授予,但不能两者兼得。 SQLColumnPrivileges 返回的结果集绝不会包含除 IS_GRANTABLE 列外所有列值相同的两行。

代码示例

有关类似函数的代码示例,请参阅 SQLColumns 函数

有关信息 请参阅
将缓冲区绑定到结果集中的列 SQLBindCol 函数
取消语句处理 SQLCancel 函数
返回表格中的列 SQLColumns 函数
提取数据块或滚动结果集 SQLFetchScroll 函数
提取多行数据 SQLFetch 函数
表格的返回权限 SQLTablePrivileges 函数
返回数据源中的表列表 SQLTables 函数

另请参阅

ODBC API 参考
ODBC 头文件