其他表值参数的元数据

若要检索表值参数的元数据,应用程序会调用 SQLProcedureColumns。 对于表值参数,SQLProcedureColumns 返回单个行。 添加了另外两个特定于SQL Server列(SS_TYPE_CATALOG_NAME和SS_TYPE_SCHEMA_NAME),以便为与表值参数关联的表类型提供架构和目录信息。 根据 ODBC 规范,SS_TYPE_CATALOG_NAME和SS_TYPE_SCHEMA_NAME显示在早期版本的 SQL Server 中添加的所有特定于驱动程序的列之前,以及 ODBC 本身要求的所有列之后。

下表列出了对表值参数非常重要的列。

列名称 数据类型 值/注释
DATA_TYPE Smallint(非 NULL) SQL_SS_TABLE
TYPE_NAME WVarchar(128)(非 NULL) 表值参数的类型名称。
COLUMN_SIZE Integer Null
BUFFER_LENGTH Integer 0
DECIMAL_DIGITS Smallint Null
NUM_PREC_RADIX Smallint Null
NULLABLE Smallint(非 NULL) SQL_NULLABLE
REMARKS Varchar Null
COLUMN_DEF WVarchar(4000) Null
SQL_DATA_TYPE Smallint(非 NULL) SQL_SS_TABLE
SQL_DATETIME_SUB Smallint Null
CHAR_OCTET_LENGTH Integer Null
ORDINAL_POSITION Integer(非 NULL) 参数的序号位置。
IS_NULLABLE Varchar "YES"
SS_TYPE_CATALOG_NAME WVarchar(128)(非 NULL) 包含表值参数表类型的类型定义的目录。
SS_TYPE_SCHEMA_NAME WVarchar(128)(非 NULL) 包含表值参数表类型的类型定义的架构。

WVarchar 列在 ODBC 规范中定义为 Varchar,但在最近所有SQL SERVER ODBC 驱动程序中实际上都作为 WVarchar 返回。 该更改是在向 ODBC 3.5 规范添加 Unicide 支持时执行的,但不能显式指出。

为了获取表值参数的其他元数据,应用程序使用目录函数 SQLColumns 和 SQLPrimaryKeys。 在针对表值参数调用这些函数之前,应用程序必须将语句属性 SQL_SOPT_SS_NAME_SCOPE 设置为 SQL_SS_NAME_SCOPE_TABLE_TYPE。 该值表示应用程序需要表类型的元数据,而不是实际表。 然后,应用程序将表值参数的TYPE_NAME作为 TableName 参数传递。 SS_TYPE_CATALOG_NAME和SS_TYPE_SCHEMA_NAME分别与 CatalogNameSchemaName 参数一起使用,以标识表值参数的目录和架构。 在应用程序检索完表值参数的元数据之后,该应用程序必须将 SQL_SOPT_SS_NAME_SCOPE 设置回原来的默认值 SQL_SS_NAME_SCOPE_TABLE。

将 SQL_SOPT_SS_NAME_SCOPE 设置为 SQL_SS_NAME_SCOPE_TABLE 时,对链接服务器的查询将失败。 使用包含服务器组件的目录调用 SQLColumns 或 SQLPrimaryKeys 将失败。

另请参阅

表值参数 (ODBC)