SQLColAttribute

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

可以使用 SQLColAttribute 检索已准备或已执行的 ODBC 语句的结果集列的属性。 对准备好的语句调用 SQLColAttribute 会导致 SQL Server 往返。 SQL Server Native Client ODBC 驱动程序在语句执行过程中接收结果集列数据,因此在 SQLExecuteSQLExecDirect 完成后调用 SQLColAttribute 不涉及服务器往返。

注意

ODBC 列标识符属性在所有 SQL Server 结果集上都不可用。

字段标识符 说明
SQL_COLUMN_TABLE_NAME 可用于从生成服务器游标的语句检索的结果集,或从包含 FOR BROWSE 子句的已执行 SELECT 语句检索的结果集。
SQL_DESC_BASE_COLUMN_NAME 可用于从生成服务器游标的语句检索的结果集,或从包含 FOR BROWSE 子句的已执行 SELECT 语句检索的结果集。
SQL_DESC_BASE_TABLE_NAME 可用于从生成服务器游标的语句检索的结果集,或从包含 FOR BROWSE 子句的已执行 SELECT 语句检索的结果集。
SQL_DESC_CATALOG_NAME 数据库名称。 可用于从生成服务器游标的语句检索的结果集,或从包含 FOR BROWSE 子句的已执行 SELECT 语句检索的结果集。
SQL_DESC_LABEL 可用于所有结果集。 此值与 SQL_DESC_NAME 字段的值完全相同。

仅当某列是表达式的结果,并且表达式不包含标签分配时,此字段的长度才为零。
SQL_DESC_NAME 可用于所有结果集。 此值与 SQL_DESC_LABEL 字段的值完全相同。

仅当某列是表达式的结果,并且表达式不包含标签分配时,此字段的长度才为零。
SQL_DESC_SCHEMA_NAME 所有者名称。 可用于从生成服务器游标的语句检索的结果集,或从包含 FOR BROWSE 子句的已执行 SELECT 语句检索的结果集。

仅当在 SELECT 语句中为列指定所有者名称时才可用。
SQL_DESC_TABLE_NAME 可用于从生成服务器游标的语句检索的结果集,或从包含 FOR BROWSE 子句的已执行 SELECT 语句检索的结果集。
SQL_DESC_UNNAMED 对于结果集中的所有列均为 SQL_NAMED,除非某列是不包含标签分配作为表达式一部分的表达式的结果。 当 SQL_DESC_UNNAMED 返回 SQL_UNNAMED 时,所有 ODBC 列标识符属性对于该列都包含零长度字符串。

SQL Server Native Client ODBC 驱动程序使用 标准版T FMTONLY 语句在调用 SQLColAttribute 但未执行的语句时减少服务器开销。

对于大型值类型, SQLColAttribute 将返回以下值:

字段标识符 更改说明
SQL_DESC_DISPLAY_SIZE 这是要显示列中数据所需的最大字符数。 对于大值类型列,返回的值为 SQL_SS_LENGTH_UNLIMITED。
SQL_DESC_LENGTH 返回结果集中该列的实际长度。 对于大值类型列,返回的值为 SQL_SS_LENGTH_UNLIMITED。
SQL_DESC_OCTET_LENGTH 返回大值类型列的最大长度。 SQL_SS_LENGTH_UNLIMITED 用于指示大小不受限制。
SQL_DESC_PRECISION 对于大值类型列,返回值 SQL_SS_LENGTH_UNLIMITED。
SQL_DESC_TYPE 对于大值类型,返回 SQL_VARCHAR、SQL_WVARCHAR 和 SQL_VARBINARY。
SQL_DESC_TYPE_NAME 对于大值类型,返回“varchar”、“varbinary”和“nvarchar”。

对于所有版本,当已准备的一批 SQL 语句生成多个结果集时,只为第一个结果集报告列属性。

以下列属性是由 SQL Server Native Client ODBC 驱动程序公开的扩展。 SQL Server Native Client ODBC 驱动程序返回 NumericAttrPtr 参数中的所有值。 这些值作为 SDWORD(signed long,有符号长值)返回,但 SQL_CA_SS_COMPUTE_BYLIST 除外,它是指向 WORD 数组的指针。

字段标识符 返回的值
SQL_CA_SS_COLUMN_HIDDEN* 如果所引用的列为隐藏主键(创建隐藏主键是为了支持包含 FOR BROWSE 的 Transact-SQL SELECT 语句)的一部分,则为 TRUE。
SQL_CA_SS_COLUMN_ID 当前 Transact-SQL SELECT 语句内 COMPUTE 子句结果列的序号位置。
SQL_CA_SS_COLUMN_KEY* 如果所引用的列是该行的主键的一部分且 Transact-SQL SELECT 语句包含 FOR BROWSE,则为 TRUE。
SQL_CA_SS_COLUMN_OP 一个整数,用于指定负责 COMPUTE 子句列中的值的聚合运算符。 整数值的定义位于 sqlncli.h 中。
SQL_CA_SS_COLUMN_ORDER 该列在 ODBC 或 Transact-SQL SELECT 语句的 ORDER BY 子句中的序号位置。
SQL_CA_SS_COLUMN_SIZE 将从列中检索的数据值绑定到 SQL_C_BINARY 变量所需的最大长度(以字节为单位)。
SQL_CA_SS_COLUMN_SSTYPE SQL Server 列中存储的数据的本机数据类型。 类型值的定义位于 sqlncli.h 中。
SQL_CA_SS_COLUMN_UTYPE SQL Server 列的用户定义数据类型的基本数据类型。 类型值的定义位于 sqlncli.h 中。
SQL_CA_SS_COLUMN_VARYLEN 如果列的数据在长度方面可能变化,则为 TRUE,否则为 FALSE。
SQL_CA_SS_COMPUTE_BYLIST 指向一个 WORD(unsigned short,无符号短值)数组的指针,该数组指定在 COMPUTE 子句的 BY 短语中使用的列。 如果 COMPUTE 子句未指定 BY 短语,则返回 NULL 指针。

数组的第一个元素包含 BY 列表列的计数。 其他元素为列序号。
SQL_CA_SS_COMPUTE_ID 作为当前 Transact-SQL 标准版LECT 语句中 COMPUTE 子句结果的行的 computeid
SQL_CA_SS_NUM_COMPUTES 在当前 Transact-SQL SELECT 语句中指定的 COMPUTE 子句的数量。
SQL_CA_SS_NUM_ORDERS 在 ODBC 或 Transact-SQL SELECT 语句的 ORDER BY 子句中指定的列数。

* 如果语句属性SQL_SOPT_SS_HIDDEN_COLUMNS设置为SQL_HC_ON,则可用。

SQL Server 2005 (9.x) 引入了特定于驱动程序的描述符字段,以提供其他信息来分别表示 XML 架构集合名称、架构名称和目录名称。 如果这些属性包含非字母数字字符,则它们不需要引号或转义符。 下表列出这些新的描述符字段:

列名称 类型 描述
SQL_CA_SS_XML_SCHEMACOLLECTION_CATALOG_NAME CharacterAttributePtr 在其中定义 XML 架构集合名称的目录的名称。 如果找不到目录名称,则此变量包含空字符串。

将从 IRD 的 SQL_DESC_SS_XML_SCHEMACOLLECTION_CATALOG_NAME 记录字段(此字段是一个读写字段)中返回此信息。
SQL_CA_SS_XML_SCHEMACOLLECTION_SCHEMA_NAM E CharacterAttributePtr 在其中定义 XML 架构集合名称的架构的名称。 如果找不到架构名称,则此变量包含空字符串。

将从 IRD 的 SQL_DESC_SS_XML_SCHEMACOLLECTION_SCHEMA_NAME 记录字段(此字段是一个读写字段)中返回此信息。
SQL_CA_SS_XML_SCHEMACOLLECTION_NAME CharacterAttributePtr XML 架构集合的名称。 如果找不到此名称,则此变量包含空字符串。

将从 IRD 的 SQL_DESC_SS_XML_SCHEMACOLLECTION_NAME 记录字段(此字段是一个读写字段)中返回此信息。

此外,SQL Server 2005 (9.x) 引入了新的特定于驱动程序的描述符字段,为结果集的用户定义类型(UDT)列或存储过程或参数化查询的 UDT 参数提供其他信息。 如果这些属性包含非字母数字字符,则它们不需要引号或转义符。 下表列出这些新的描述符字段:

列名 类型 描述
SQL_CA_SS_UDT_CATALOG_NAME CharacterAttributePtr 包含 UDT 的目录的名称。
SQL_CA_SS_UDT_SCHEMA_NAME CharacterAttributePtr 包含 UDT 的架构的名称。
SQL_CA_SS_UDT_TYPE_NAME CharacterAttributePtr UDT 的名称。
SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME CharacterAttributePtr UDT 的程序集完全限定名称。

现有的描述符字段标识符 SQL_DESC_TYPE_NAME 用于指示 UDT 的名称。 UDT 类型列的 SQL_DESC_TYPE 字段为 SQL_SS_UDT。

SQLColAttribute 对日期和时间增强功能的支持

有关为日期/时间类型返回的值,请参阅参数和结果元数据中的“IRD 字段中返回的信息”部分。

有关详细信息,请参阅日期和时间改进(ODBC)。

SQLColAttribute 对大型 CLR UDT 的支持

SQLColAttribute 支持大型 CLR 用户定义的类型(UDT)。 有关详细信息,请参阅大型 CLR 用户定义的类型(ODBC)。

SQLColAttribute 对于稀疏列的支持

SQLColAttribute 查询新的实现行描述符(IRD)字段(SQL_CA_SS_IS_COLUMN_标准版T),以确定列是否为column_set列。

有关详细信息,请参阅稀疏列支持(ODBC)。

另请参阅

SQLColAttribute 函数
ODBC API 实现细节
SQLSetStmtAttr