テーブル値パラメーターのメタデータを取得するために、アプリケーションは SQLProcedureColumns を呼び出します。 テーブル値パラメーターの場合、SQLProcedureColumns は 1 行を返します。 テーブル値パラメーターに関連付けられたテーブル型のスキーマとカタログ情報を提供するために、SQL Server 固有の 2 つの列 (SS_TYPE_CATALOG_NAMEとSS_TYPE_SCHEMA_NAME) が追加されました。 ODBC 仕様に準拠して、SS_TYPE_CATALOG_NAMEとSS_TYPE_SCHEMA_NAMEは、以前のバージョンの SQL Server で追加されたすべてのドライバー固有の列の前、および ODBC 自体によって義務付けられているすべての列の後に表示されます。
テーブル値パラメーターにとって重要な列を次の表に示します。
| 列名 | データの種類 | 値およびコメント |
|---|---|---|
| データ型 | Smallint (NULL 以外) | SQL_SS_TABLE |
| TYPE_NAME | WVarchar(128) (NULL 以外) | テーブル値パラメーターの型名 |
| COLUMN_SIZE | 整数 | ヌル |
| BUFFER_LENGTH | 整数 | 0 |
| DECIMAL_DIGITS | スモール・イント | ヌル |
| NUM_PREC_RADIX | スモール・イント | ヌル |
| NULL可能 | Smallint (NULL 以外) | SQL_NULLABLE |
| 備考 | Varchar | ヌル |
| COLUMN_DEF | WVarchar(4000) | ヌル |
| SQL_DATA_TYPE | Smallint (NULL 以外) | SQL_SS_TABLE |
| SQL_DATETIME_SUB | スモール・イント | ヌル |
| CHAR_OCTET_LENGTH | 整数 | ヌル |
| 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 として返されます。 この変更は、Unicide のサポートが ODBC 3.5 仕様に追加されたが、明示的に呼び出されなかった場合に行われました。
テーブル値パラメーターの追加メタデータを取得するために、アプリケーションはカタログ関数 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 の呼び出しは失敗します。