其他表值参数的元数据
若要检索表值参数的元数据,应用程序应调用 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 分别用于 CatalogName 和 SchemaName 参数,以便标识表值参数的目录和架构。 在应用程序检索完表值参数的元数据之后,该应用程序必须将 SQL_SOPT_SS_NAME_SCOPE 设置回原来的默认值 SQL_SS_NAME_SCOPE_TABLE。
将 SQL_SOPT_SS_NAME_SCOPE 设置为 SQL_SS_NAME_SCOPE_TABLE 时,对链接服务器的查询将失败。 对包含服务器组件的目录调用 SQLColumns 或 SQLPrimaryKeys 将失败。