テーブル値パラメーターの追加メタデータ
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
テーブル値パラメーターのメタデータを取得するために、アプリケーションは 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 自体によって義務付けられているすべての列の後に表示されます。
テーブル値パラメーターにとって重要な列を次の表に示します。
列名 | データ型 | 値およびコメント |
---|---|---|
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 に設定する必要があります。 この値は、アプリケーションが実際のテーブルではなくテーブル型のメタデータを必要としていることを示します。 その後、アプリケーションはテーブル値パラメーターの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 の呼び出しは失敗します。