テーブル値パラメータの追加メタデータ
テーブル値パラメータのメタデータを取得するには、アプリケーションで SQLProcedureColumns を呼び出します。SQLProcedureColumns は、テーブル値パラメータに 1 行を返します。テーブル値パラメータに関連付けられたテーブル型のスキーマ情報とカタログ情報を提供するために、SS_TYPE_CATALOG_NAME、SS_TYPE_SCHEMA_NAME という、SQL Server 固有の 2 つの列が追加されました。SS_TYPE_CATALOG_NAME および SS_TYPE_SCHEMA_NAME は、ODBC 仕様に準拠して、以前のバージョンの 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 仕様に Unicode のサポートが追加されたときに行われましたが、明示されていませんでした。
アプリケーションでは、テーブル値パラメータの追加メタデータを取得するために、カタログ関数 SQLColumns および SQLPrimaryKeys を使用します。これらの関数がテーブル値パラメータのために呼び出される前に、アプリケーションでは、ステートメント属性 SQL_SOPT_SS_NAME_SCOPE を SQL_SS_NAME_SCOPE_TABLE_TYPE に設定する必要があります。この値は、アプリケーションが実際のテーブルではなくテーブル型のメタデータを必要としていることを示します。次に、アプリケーションは、TableName パラメータとして、テーブル値パラメータの TYPE_NAME を渡します。テーブル値パラメータのカタログとスキーマを識別するために、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 を呼び出すと、失敗します。