テーブル値パラメーターの追加メタデータ
テーブル値パラメーターのメタデータを取得するには、アプリケーションで 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 を呼び出すと、失敗します。