SQLDescribeParamSQLDescribeParam

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

任意の SQL ステートメントのパラメーターを記述する、 SQL ServerSQL Server Native Client ODBC ドライバーが構築され、実行、 Transact-SQLTransact-SQL SQLDescribeParam が準備された ODBC ステートメント ハンドルで呼び出されたときに、SELECT ステートメント。To describe the parameters of any SQL statement, the SQL ServerSQL Server Native Client ODBC driver builds and executes a Transact-SQLTransact-SQL SELECT statement when SQLDescribeParam is called on a prepared ODBC statement handle. この結果セットのメタデータにより、準備されたステートメント内のパラメーターの特性が決まります。The metadata of the result set determines the characteristics of the parameters in the prepared statement. SQLDescribeParam は、SQLExecute、SQLExecDirect またはを返す可能性のあるエラー コードを返すことができます。SQLDescribeParam can return any error code that SQLExecute or SQLExecDirect might return.

以降では、データベース エンジンの機能強化SQL Server 2012 (11.x)SQL Server 2012 (11.x)期待どおりの結果のより正確な記述を取得する SQLDescribeParam を許可します。Improvements in the database engine starting with SQL Server 2012 (11.x)SQL Server 2012 (11.x) allow SQLDescribeParam to obtain more accurate descriptions of the expected results. これらのより正確な結果の以前のバージョンの SQLDescribeParam によって返される値が異なる場合がありますSQL ServerSQL Serverします。These more accurate results may differ from the values returned by SQLDescribeParam in previous versions of SQL ServerSQL Server. 詳細については、次を参照してください。メタデータ検出します。For more information, see Metadata Discovery.

新しいもSQL Server 2012 (11.x)SQL Server 2012 (11.x)ParameterSizePtrで定義されている、対応するパラメーター マーカーの式または列の文字で、サイズの定義に合わせて値を返すようになりました、 ODBC仕様します。Also new in SQL Server 2012 (11.x)SQL Server 2012 (11.x), ParameterSizePtr now returns a value that aligns with the definition for the size, in characters, of the column or expression of the corresponding parameter marker as defined in the ODBC specification. 以前のバージョンのSQL ServerSQL ServerNative Client、 ParameterSizePtr可能性がありますの対応する値SQL_DESC_OCTET_LENGTH型、または渡された無関係な列サイズの値型の場合は、SQLBindParameter、この値を無視 (SQL_INTEGERなど)。In previous versions of SQL ServerSQL Server Native Client, ParameterSizePtr could be the corresponding value of SQL_DESC_OCTET_LENGTH for the type, or an irrelevant column size value that was supplied to SQLBindParameter for a type, the value of which should be ignored (SQL_INTEGER, for example).

ドライバーでは、次の状況で呼び出し元 SQLDescribeParam はサポートされません。The driver does not support calling SQLDescribeParam in the following situations:

  • いずれかの SQLExecDirect 後Transact-SQLTransact-SQLUPDATE または DELETE ステートメントの FROM 句を含むです。After SQLExecDirect for any Transact-SQLTransact-SQL UPDATE or DELETE statements containing the FROM clause.

  • ODBC ステートメントまたは Transact-SQLTransact-SQL ステートメントが HAVING 句にパラメーターを含んでいる場合、または SUM 関数の結果と比較される場合。For any ODBC or Transact-SQLTransact-SQL statement containing a parameter in a HAVING clause, or compared to the result of a SUM function.

  • ODBC ステートメントまたは Transact-SQLTransact-SQL ステートメントがパラメーターを含んでいるサブクエリに依存している場合。For any ODBC or Transact-SQLTransact-SQL statement depending on a subquery containing parameters.

  • ODBC SQL ステートメントが、比較の両方の式、LIKE、定量化された述語内にパラメーター マーカーを含んでいる場合。For ODBC SQL statements containing parameter markers in both expressions of a comparison, like, or quantified predicate.

  • クエリのいずれかのパラメーターが関数に対するパラメーターである場合。For any queries where one of the parameters is a parameter to a function.

  • コメントがある場合 (/* */) で、Transact-SQLTransact-SQLコマンド。When there are comments (/* */) in the Transact-SQLTransact-SQL command.

バッチを処理するときにTransact-SQLTransact-SQLステートメントをドライバーもサポートしていないバッチの最初のステートメントの後のステートメントでパラメーター マーカー SQLDescribeParam を呼び出すことです。When processing a batch of Transact-SQLTransact-SQL statements, the driver also does not support calling SQLDescribeParam for parameter markers in statements after the first statement in the batch.

SQLDescribeParam は、システム ストアド プロシージャを使用して準備されたストアド プロシージャのパラメーターを説明する、ときにsp_sproc_columnsパラメーターの特性を取得します。When describing the parameters of prepared stored procedures, SQLDescribeParam uses the system stored procedure sp_sproc_columns to retrieve parameter characteristics. sp_sproc_columns には、現在のユーザー データベース内のストアド プロシージャのデータを報告できます。sp_sproc_columns can report data for stored procedures within the current user database. ストアド プロシージャの完全修飾名を準備するには、データベース全体に対して実行する SQLDescribeParam が使用できます。Preparing a fully qualified stored procedure name allows SQLDescribeParam to execute across databases. たとえば、システム ストアド プロシージャsp_who準備し、として任意のデータベースで実行できます。For example, the system stored procedure sp_who can be prepared and executed in any database as:

SQLPrepare(hstmt, "{call sp_who(?)}", SQL_NTS);  

SQLDescribeParam を正しく準備には任意のデータベースに接続されているときに設定、空の行が返された後に実行しますが、マスターします。Executing SQLDescribeParam after successful preparation returns an empty row set when connected to any database but master. 次のように準備された、同じ呼び出しを現在のユーザー データベースに関係なく正常に SQLDescribeParam が発生します。The same call, prepared as follows, causes SQLDescribeParam to succeed regardless of the current user database:

SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);  

大きな値のデータ型で返される値DataTypePtr SQL_VARCHAR、SQL_VARBINARY、SQL_NVARCHAR のいずれかです。For large value data types, the value returned in DataTypePtr is SQL_VARCHAR, SQL_VARBINARY, or SQL_NVARCHAR. 大きな値データ型のパラメーターのサイズが「無制限」であることを示す、 SQL ServerSQL Server Native Client ODBC ドライバー セットParameterSizePtrを 0 にします。To indicate that the size of the large value data type parameter is "unlimited," the SQL ServerSQL Server Native Client ODBC driver sets ParameterSizePtr to 0. 標準の実際のサイズの値が返されますvarcharパラメーター。Actual size values are returned for standard varchar parameters.

注意

パラメーターが SQL_VARCHAR、SQL_VARBINARY、SQL_WVARCHAR のいずれかのパラメーターの最大サイズに既にバインドされている場合は、"無制限" ではなく、バインドされたパラメーターのサイズが返されます。If the parameter has already been bound with a maximum size for the SQL_VARCHAR, SQL_VARBINARY, or SQL_WVARCHAR parameters, the bound size of the parameter is returned, not "unlimited."

サイズが "無制限" の入力パラメーターをバインドするには、実行時データを使用する必要があります。To bind an "unlimited" size input parameter, data-at-execution must be used. サイズが「無制限」出力パラメーターをバインドすることはできません (など、出力パラメーターからデータをストリーミングする方法が指定されていませんSQLGetDataが結果セット)。It is not possible to bind an "unlimited" size output parameter (there is no method for streaming data from an output parameter, like SQLGetData does for result sets).

出力パラメーターの場合は、バッファーをバインドする必要があります。値が大きすぎる場合はバッファーがいっぱいになり、SQL_SUCCESS_WITH_INFO メッセージが "文字列データの右側が切り捨てられました。" という警告と共に返されます。For output parameters, a buffer must be bound and if the value is too large, the buffer is filled and a SQL_SUCCESS_WITH_INFO message and is returned along with the "string data; right truncation" warning. その後、切り捨てられたデータが破棄されます。The data that was truncated is then discarded.

SQLDescribeParam とテーブル値パラメーターSQLDescribeParam and Table-Valued Parameters

SQLDescribeParam の準備されたステートメントのテーブル値パラメーターの情報を取得できます。An application can retrieve table-valued parameter information for a prepared statement with SQLDescribeParam. 詳細については、次を参照してください。準備されたステートメントのテーブル値パラメーターのメタデータします。For more information, see Table-Valued Parameter Metadata for Prepared Statements.

テーブル値パラメーターの詳細については一般に、表示テーブル値パラメーター (ODBC)します。For more information about table-valued parameters in general, see Table-Valued Parameters (ODBC).

SQLDescribeParam による機能強化された日付と時刻のサポートSQLDescribeParam Support for Enhanced Date and Time Features

日付型または時刻型に対して返される値を次に示します。The values returned for date/time types are as follows:

DataTypePtrDataTypePtr ParameterSizePtrParameterSizePtr DecimalDigitsPtrDecimalDigitsPtr
DATETIMEdatetime SQL_TYPE_TIMESTAMPSQL_TYPE_TIMESTAMP 2323 33
smalldatetimesmalldatetime SQL_TYPE_TIMESTAMPSQL_TYPE_TIMESTAMP 1616 00
日付date SQL_TYPE_DATESQL_TYPE_DATE 1010 00
timetime SQL_SS_TIME2SQL_SS_TIME2 8, 10..168, 10..16 0..70..7
datetime2datetime2 SQL_TYPE_TIMESTAMPSQL_TYPE_TIMESTAMP 19, 21..2719, 21..27 0..70..7
datetimeoffsetdatetimeoffset SQL_SS_TIMESTAMPOFFSETSQL_SS_TIMESTAMPOFFSET 26, 28..3426, 28..34 0..70..7

詳細については、次を参照してください。日付と時刻の強化(ODBC)します。For more information, see Date and Time Improvements (ODBC).

SQLDescribeParam による大きな CLR UDT のサポートSQLDescribeParam Support for Large CLR UDTs

SQLDescribeParam大きなの CLR ユーザー定義型 (Udt) をサポートしています。SQLDescribeParam supports large CLR user-defined types (UDTs). 詳細については、次を参照してください。 Large CLR User-Defined 型(ODBC)します。For more information, see Large CLR User-Defined Types (ODBC).

参照See Also

SQLDescribeParam 関数 SQLDescribeParam Function
ODBC API 実装の詳細ODBC API Implementation Details