sp_describe_undeclared_parameters (Transact-SQL)sp_describe_undeclared_parameters (Transact-SQL)

適用対象: はいSQL Server はいAzure SQL Database はいAzure Synapse Analytics (SQL DW) いいえParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database YesAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

バッチ内の宣言されていないパラメーターに関するメタデータを含む結果セットを返し Transact-SQLTransact-SQL ます。Returns a result set that contains metadata about undeclared parameters in a Transact-SQLTransact-SQL batch. ** @ Tsqlバッチで使用されているが、 ** @ paramsで宣言されていない各パラメーターを考慮します。Considers each parameter that is used in the @tsql batch, but not declared in @params. 結果セットが返されます。この結果セットには、そのパラメーターに対して推測される型情報が含まれる、このようなパラメーターごとに1行のデータが含まれます。A result set is returned that contains one row for each such parameter, with the deduced type information for that parameter. ** @ Tsql入力バッチにパラメーターがない場合、このプロシージャは空の結果セットを返します ( ** @ paramsで宣言されているものを除く)。The procedure returns an empty result set if the @tsql input batch has no parameters except those declared in @params.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

  
sp_describe_undeclared_parameters   
    [ @tsql = ] 'Transact-SQL_batch'   
    [ , [ @params = ] N'parameters' data type ] [, ...n]  

注意

Azure Synapse Analytics (以前の SQL DW) でこのストアドプロシージャを使用するには、データベースの互換性レベルが10を超える必要があります。To use this stored procedure in Azure Synapse Analytics (Formerly SQL DW), the compatibility level of a database needs to greater than 10.

引数Arguments

[ \@tsql = ] 'Transact-SQL\_batch'1つ以上の Transact-SQLTransact-SQL ステートメント。[ \@tsql = ] 'Transact-SQL\_batch' One or more Transact-SQLTransact-SQL statements. Transact-sql SQL_batchnvarchar (n) またはnvarchar (max) です。Transact-SQL_batch may be nvarchar(n) or nvarchar(max).

[ \@params = ] N'parameters'@params は、 Transact-SQLTransact-SQL sp_executesql の動作と同様に、バッチのパラメーターの宣言文字列を提供します。[ \@params = ] N'parameters' @params provides a declaration string for parameters for the Transact-SQLTransact-SQL batch, similarly to the way sp_executesql works. パラメーターには、 nvarchar (n) またはnvarchar (max) を指定できます。Parameters may be nvarchar(n) or nvarchar(max).

は、 Transact SQL_batchに埋め込まれているすべてのパラメーターの定義を含む1つの文字列です。Is one string that contains the definitions of all parameters that have been embedded in Transact-SQL_batch. この文字列は Unicode 定数または Unicode 変数にする必要があります。The string must be either a Unicode constant or a Unicode variable. 各パラメーター定義は、パラメーター名とデータ型で構成されます。Each parameter definition consists of a parameter name and a data type. n は、追加のパラメーター定義を示すプレースホルダーです。n is a placeholder that indicates additional parameter definitions. ステートメント内の Transact-sql ステートメントまたはバッチにパラメーターが含まれていない場合、 @ params は必要ありません。If the Transact-SQL statement or batch in the statement does not contain parameters, @params is not required. このパラメーターの既定値は NULL です。The default value for this parameter is NULL.

データ型Datatype
パラメーターのデータ型です。The data type of the parameter.

リターン コードの値Return Code Values

成功した場合、 sp_describe_undeclared_parametersは常に戻り値0を返します。sp_describe_undeclared_parameters always returns return status of zero on success. プロシージャがエラーをスローし、プロシージャが RPC として呼び出された場合、返される状態は、dm_exec_describe_first_result_set の error_type 列で説明されているエラーの種類によって設定されます。If the procedure throws an error and the procedure is called as an RPC, the return status is populated by the type of error as described in the error_type column of sys.dm_exec_describe_first_result_set. プロシージャがから呼び出された場合 Transact-SQLTransact-SQL 、エラーが発生した場合でも、戻り値は常に0になります。If the procedure is called from Transact-SQLTransact-SQL, the return value is always zero, even in error cases.

結果セットResult Sets

sp_describe_undeclared_parametersは、次の結果セットを返します。sp_describe_undeclared_parameters returns the following result set.

列名Column name データ型Data type 説明Description
parameter_ordinalparameter_ordinal int NOT NULLint NOT NULL 結果セット内のパラメーターの位置を表す序数を格納します。Contains the ordinal position of the parameter in the result set. 最初のパラメーターの位置は 1 で指定されます。Position of the first parameter will be specified as 1.
namename sysname NOT NULLsysname NOT NULL パラメーターの名前を格納します。Contains the name of the parameter.
suggested_system_type_idsuggested_system_type_id int NOT NULLint NOT NULL に指定されているパラメーターのデータ型のsystem_type_idを格納します。Contains the system_type_id of the data type of the parameter as specified in sys.types.

CLR 型の場合、 system_type_name列が NULL を返す場合でも、この列は値240を返します。For CLR types, even though the system_type_name column will return NULL, this column will return the value 240.
suggested_system_type_namesuggested_system_type_name nvarchar (256) NULLnvarchar (256) NULL データ型の名前を格納します。Contains the data type name. パラメーターのデータ型に対して指定された引数 (長さ、有効桁数、小数点以下桁数など) を含めます。Includes arguments (such as length, precision, scale) specified for the data type of the parameter. データ型がユーザー定義の別名型の場合は、基になるシステム型がここで指定されます。If the data type is a user-defined alias type, the underlying system type is specified here. CLR ユーザー定義データ型である場合は、この列に NULL が返されます。If it is a CLR user-defined data type, NULL is returned in this column. パラメーターの型を推測できない場合は、NULL が返されます。If the type of the parameter cannot be deduced, NULL is returned.
suggested_max_lengthsuggested_max_length smallint NOT NULLsmallint NOT NULL 「Sys. 列」を参照してください。See sys.columns. max_length列の説明。for max_length column description.
suggested_precisionsuggested_precision tinyint NOT NULLtinyint NOT NULL 「Sys. 列」を参照してください。See sys.columns. 有効桁数列の説明。for precision column description.
suggested_scalesuggested_scale tinyint NOT NULLtinyint NOT NULL 「Sys. 列」を参照してください。See sys.columns. スケール列の説明。for scale column description.
suggested_user_type_idsuggested_user_type_id int NULLint NULL CLR 型と別名型の場合、sys.types で指定された列のデータ型の user_type_id を格納します。For CLR and alias types, contains the user_type_id of the data type of the column as specified in sys.types. それ以外の場合は NULL です。Otherwise is NULL.
suggested_user_type_databasesuggested_user_type_database sysname NULLsysname NULL CLR 型と別名型の場合、その型が定義されたデータベースの名前を格納します。For CLR and alias types, contains the name of the database in which the type is defined. それ以外の場合は NULL です。Otherwise is NULL.
suggested_user_type_schemasuggested_user_type_schema sysname NULLsysname NULL CLR 型と別名型の場合、その型が定義されたスキーマの名前を格納します。For CLR and alias types, contains the name of the schema in which the type is defined. それ以外の場合は NULL です。Otherwise is NULL.
suggested_user_type_namesuggested_user_type_name sysname NULLsysname NULL CLR 型と別名型の場合、その型の名前を格納します。For CLR and alias types, contains the name of the type. それ以外の場合は NULL です。Otherwise is NULL.
suggested_assembly_qualified_type_namesuggested_assembly_qualified_type_name nvarchar (4000) NULLnvarchar (4000) NULL CLR 型の場合は、型を定義するアセンブリおよびクラスの名前を返します。For CLR types, returns the name of the assembly and class that defines the type. それ以外の場合は NULL です。Otherwise is NULL.
suggested_xml_collection_idsuggested_xml_collection_id int NULLint NULL パラメーターのデータ型の xml_collection_id を格納します。これは、sys. columns で指定されています。Contains the xml_collection_id of the data type of the parameter as specified in sys.columns. この列は、返される型が XML スキーマ コレクションに関連付けられていない場合は NULL を返します。This column will return NULL if the type returned is not associated with an XML schema collection.
suggested_xml_collection_databasesuggested_xml_collection_database sysname NULLsysname NULL この型に関連付けられている XML スキーマ コレクションが定義されているデータベースを格納します。Contains the database in which the XML schema collection associated with this type is defined. この列は、返される型が XML スキーマ コレクションに関連付けられていない場合は NULL を返します。This column will return NULL if the type returned is not associated with an XML schema collection.
suggested_xml_collection_schemasuggested_xml_collection_schema sysname NULLsysname NULL この型に関連付けられている XML スキーマ コレクションが定義されているスキーマを格納します。Contains the schema in which the XML schema collection associated with this type is defined. この列は、返される型が XML スキーマ コレクションに関連付けられていない場合は NULL を返します。This column will return NULL if the type returned is not associated with an XML schema collection.
suggested_xml_collection_namesuggested_xml_collection_name sysname NULLsysname NULL この型に関連付けられている XML スキーマ コレクションの名前を格納します。Contains the name of the XML schema collection associated with this type. この列は、返される型が XML スキーマ コレクションに関連付けられていない場合は NULL を返します。This column will return NULL if the type returned is not associated with an XML schema collection.
suggested_is_xml_documentsuggested_is_xml_document bit NOT NULLbit NOT NULL 返される型が XML であり、その型が XML ドキュメントであることが保証されている場合は1を返します。Returns 1 if the type being returned is XML and that type is guaranteed to be an XML document. それ以外の場合は 0 を返します。Otherwise returns 0.
suggested_is_case_sensitivesuggested_is_case_sensitive bit NOT NULLbit NOT NULL この列が大文字と小文字を区別する文字列型の場合は 1、それ以外の場合は 0 を返します。Returns 1 if the column is of a case-sensitive string type and 0 if it is not.
suggested_is_fixed_length_clr_typesuggested_is_fixed_length_clr_type bit NOT NULLbit NOT NULL この列が固定長の CLR 型の場合は 1、それ以外の場合は 0 を返します。Returns 1 if the column is of a fixed-length CLR type and 0 if it is not.
suggested_is_inputsuggested_is_input bit NOT NULLbit NOT NULL パラメーターが代入の左辺以外の場所で使用されている場合は1を返します。Returns 1 if the parameter is used anywhere other than left side of an assignment. それ以外の場合は 0 を返します。Otherwise returns 0.
suggested_is_outputsuggested_is_output bit NOT NULLbit NOT NULL パラメーターが代入の左辺で使用されているか、ストアドプロシージャの出力パラメーターに渡された場合、1を返します。Returns 1 if the parameter is used on the left side of an assignment or is passed to an output parameter of a stored procedure. それ以外の場合は 0 を返します。Otherwise returns 0.
formal_parameter_nameformal_parameter_name sysname NULLsysname NULL パラメーターがストアド プロシージャまたはユーザー定義関数の引数の場合は、対応する仮パラメーターの名前を返します。If the parameter is an argument to a stored procedure or a user-defined function, returns the name of the corresponding formal parameter. それ以外の場合は NULL を返します。Otherwise returns NULL.
suggested_tds_type_idsuggested_tds_type_id int NOT NULLint NOT NULL 内部使用です。For internal use.
suggested_tds_lengthsuggested_tds_length int NOT NULLint NOT NULL 内部使用です。For internal use.

解説Remarks

sp_describe_undeclared_parametersは常に0の戻り値の状態を返します。sp_describe_undeclared_parameters always returns return status of zero.

最も一般的な使用方法は、パラメーターを含み、それらのパラメーターを任意の方法で処理する必要がある Transact-SQLTransact-SQL ステートメントがアプリケーションで指定される場合です。The most common use is when an application is given a Transact-SQLTransact-SQL statement that might contain parameters and must process them in some way. たとえば、ユーザーが ODBC パラメーターの構文に基づくクエリを提供するユーザー インターフェイス (ODBCTest または RowsetViewer など) があります。An example is a user interface (such as ODBCTest or RowsetViewer) where the user provides a query with ODBC parameter syntax. アプリケーションは、パラメーターの数を動的に検出し、各パラメーターの入力をユーザーに求める必要があります。The application must dynamically discover the number of parameters and prompt the user for each one.

別の例として、ユーザー入力なしで、アプリケーションがパラメーターをループして、そのデータを他の場所 (テーブルなど) から取得する必要がある場合が挙げられます。Another example is when without user input, an application must loop over the parameters and obtain the data for them from some other location (such as a table). この場合は、アプリケーションはすべてのパラメーター情報を一度に渡す必要はありません。In this case, the application does not have to pass all the parameter information at once. 代わりに、アプリケーションはプロバイダーからすべてのパラメーター情報を取得し、テーブルからデータ自体を取得することができます。Instead, the application can get all the parameters information from the provider and obtain the data itself from the table. Sp_describe_undeclared_parametersを使用するコードはより汎用的で、データ構造が後で変更される場合に変更が必要になる可能性は低くなります。Code using sp_describe_undeclared_parameters is more generic and is less likely to require modification if the data structure changes later.

sp_describe_undeclared_parametersは、次のいずれかの場合にエラーを返します。sp_describe_undeclared_parameters returns an error in any of the following cases.

  • 入力 @ tsql が有効なバッチではない場合 Transact-SQLTransact-SQLIf the input @tsql is not a valid Transact-SQLTransact-SQL batch. 有効性は、バッチの解析と分析によって決まり Transact-SQLTransact-SQL ます。Validity is determined by parsing and analyzing the Transact-SQLTransact-SQL batch. バッチが有効であるかどうかを判断するときに、クエリの最適化中または実行中のバッチによって発生したエラーは考慮されません Transact-SQLTransact-SQLAny errors caused by the batch during query optimization or during execution are not considered when determining whether the Transact-SQLTransact-SQL batch is valid.

  • @Params が NULL ではなく、パラメーターに対して構文的に有効な宣言文字列ではない文字列が含まれている場合、またはパラメーターに複数回宣言する文字列が含まれている場合。If @params is not NULL and contains a string that is not a syntactically valid declaration string for parameters, or if it contains a string that declares any parameter more than one time.

  • 入力バッチが、 Transact-SQLTransact-SQL params で宣言されたパラメーターと同じ名前のローカル変数を宣言している場合 @ 。If the input Transact-SQLTransact-SQL batch declares a local variable of the same name as a parameter declared in @params.

  • ステートメントが一時テーブルを参照している場合。If the statement references temporary tables.

  • クエリには、パーマネントテーブルの作成が含まれ、その後クエリが実行されます。The query includes the creation of a permanent table that is then queried.

@Tsql にパラメーターがない場合、params で宣言されたパラメーター以外の場合、この @ プロシージャは空の結果セットを返します。If @tsql has no parameters, other than those declared in @params, the procedure returns an empty result set.

パラメーター選択アルゴリズムParameter Selection Algorithm

宣言されていないパラメーターを持つクエリの場合、宣言されていないパラメーターのデータ型の推論は、3つの手順で行われます。For a query with undeclared parameters, data type deduction for undeclared parameters proceeds in three steps.

手順 1Step 1

宣言されていないパラメーターを持つクエリのデータ型の推論の最初の手順は、宣言されていないパラメーターに依存しないデータ型を持つすべてのサブ式のデータ型を見つけることです。The first step in data type deduction for a query with undeclared parameters is to find the data types of all the sub-expressions whose data types do not depend on the undeclared parameters. 型は、次の式に対して決定できます。The type can be determined for the following expressions:

  • 列、定数、変数、および宣言されたパラメーター。Columns, constants, variables, and declared parameters.

  • ユーザー定義関数 (UDF) の呼び出しの結果。Results of a call to a user-defined function (UDF).

  • すべての入力に対して宣言されていないパラメーターに依存しないデータ型を持つ式。An expression with data types that do not depend on the undeclared parameters for all inputs.

たとえば、クエリ SELECT dbo.tbl(@p1) + c1 FROM t1 WHERE c2 = @p2 + 2 を考えます。For example, consider the query SELECT dbo.tbl(@p1) + c1 FROM t1 WHERE c2 = @p2 + 2. 式 dbo.? ( @ p1) + c1 および c2 にはデータ型があり、expression @ p1 と @ p2 + 2 は含まれません。The expressions dbo.tbl(@p1) + c1 and c2 have data types, and expression @p1 and @p2 + 2 do not.

この手順の実行後、UDF の呼び出し以外の任意の式に、データ型のない 2 つの引数が含まれている場合、型推論はエラーで失敗します。After this step, if any expression (other than a call to a UDF) has two arguments without data types, type deduction fails with an error. たとえば、次のすべての式ではエラーが発生します。For example, the following all produce errors:

SELECT * FROM t1 WHERE @p1 = @p2  
SELECT * FROM t1 WHERE c1 = @p1 + @p2  
SELECT * FROM t1 WHERE @p1 = SUBSTRING(@p2, 2, 3)  

次の例では、エラーは生成されません。The following example does not produce an error:

SELECT * FROM t1 WHERE @p1 = dbo.tbl(c1, @p2, @p3)  

手順 2Step 2

宣言されて @ いないパラメーター p の場合、型推論アルゴリズムでは、p を含む最も内側の式 E (p) が検索され、 @ @ 次のいずれかになります。For a given undeclared parameter @p, the type deduction algorithm finds the innermost expression E(@p) that contains @p and is one of the following:

  • 比較演算子または代入演算子の引数。An argument to a comparison or assignment operator.

  • ユーザー定義関数 (テーブル値 UDF を含む)、プロシージャ、またはメソッドの引数。An argument to a user-defined function (including table-valued UDF), procedure, or method.

  • INSERTステートメントのVALUES句の引数。An argument to a VALUES clause of an INSERT statement.

  • キャストまたは変換の引数。An argument to a CAST or CONVERT.

型推論アルゴリズムでは、 @ E (p) のターゲットデータ型 TT (p) が検索され @ ます。The type deduction algorithm finds a target data type TT(@p) for E(@p). 前の例のターゲットデータ型は次のとおりです。Target data types for the previous examples are as follows:

  • 比較または代入の反対側のデータ型。The data type of the other side of the comparison or assignment.

  • この引数が渡されるパラメーターの宣言されたデータ型。The declared data type of the parameter to which this argument is passed.

  • この値が挿入される列のデータ型。The data type of the column into which this value is inserted.

  • ステートメントがキャストまたは変換されるデータ型。The data type to which the statement is casting or converting.

たとえば、クエリ SELECT * FROM t WHERE @p1 = dbo.tbl(@p2 + c1) を考えます。For example, consider the query SELECT * FROM t WHERE @p1 = dbo.tbl(@p2 + c1). 次に、E ( @ p1) = @ P1, e ( @ p2) = @ P2 + c1, tt ( @ p1) は、宣言された戻り値のデータ型は dbo.。 tt ( @ p2) は、dbo. データ型の宣言されたパラメーターのデータ型です。Then E(@p1) = @p1, E(@p2) = @p2 + c1, TT(@p1) is the declared return data type of dbo.tbl, and TT(@p2) is the declared parameter data type for dbo.tbl.

@P が手順2の先頭に示されている式に含まれていない場合、型推論アルゴリズムは、e ( @ p) が p を含む最大のスカラー式であると判断し、 @ 型推論アルゴリズムは e (p) のターゲットデータ型 TT (p) を計算しません @ @ 。If @p is not contained in any expression listed at the beginning of step 2, the type deduction algorithm determines that E(@p) is the largest scalar expression that contains @p, and the type deduction algorithm does not compute a target data type TT(@p) for E(@p). たとえば、クエリが SELECT の場合、 @p + 2 E ( @ p) = @ p + 2、TT (p) はありません @ 。For example, if the query is SELECT @p + 2 then E(@p) = @p + 2, and there is no TT(@p).

ステップ 3Step 3

E ( @ p) と TT ( @ p) が識別されたので、型推論アルゴリズムは、 @ 次の2つの方法のいずれかで p のデータ型を推測します。Now that E(@p) and TT(@p) are identified, the type deduction algorithm deduces a data type for @p in one of the following two ways:

  • 単純な推論Simple deduction

    E ( @ p) = @ p および TT ( @ p) が存在する場合、つまり、 @ p が手順 2. の先頭に示されているいずれかの式に直接引数として指定されている場合、型推論アルゴリズム推測は p のデータ型を @ TT (p) にする必要 @ があります。If E(@p) = @p and TT(@p) exists, i.e., if @p is directly an argument to one of the expressions listed at the beginning of step 2, the type deduction algorithm deduces the data type of @p to be TT(@p). 次に例を示します。For example:

    SELECT * FROM t WHERE c1 = @p1 AND @p2 = dbo.tbl(@p3)  
    

    @P1、p2、および p3 のデータ型は、 @ @ c1 のデータ型、戻り値のデータ型は dbo です。また、それぞれ dbo. データ型のパラメーターデータ型になります。The data type for @p1, @p2, and @p3 will be the data type of c1, the return data type of dbo.tbl, and the parameter data type for dbo.tbl respectively.

    特殊なケースとして、 @ p が < 、、>、 < =、または >= 演算子の引数である場合、単純な推論規則は適用されません。As a special case, if @p is an argument to a <, >, <=, or >= operator, simple deduction rules do not apply. 型推論アルゴリズムでは、次のセクションで説明する一般的な推論ルールが使用されます。The type deduction algorithm will use the general deduction rules explained in the next section. たとえば、c1 がデータ型 char(30) の列である場合に、以下の 2 つのクエリについて考えてみます。For example, if c1 is a column of data type char(30), consider the following two queries:

    SELECT * FROM t WHERE c1 = @p  
    SELECT * FROM t WHERE c1 > @p  
    

    最初のケースでは、このトピックで前述したルールに従って、型推論アルゴリズム推測char (30) を p のデータ型として使用し @ ます。In the first case, the type deduction algorithm deduces char(30) as the data type for @p as per rules earlier in this topic. 2番目のケースでは、次のセクションの一般的な推論規則に従って、型推論アルゴリズム推測varchar (8000) になります。In the second case, the type deduction algorithm deduces varchar(8000) according to the general deduction rules in the next section.

  • 一般的な推論General deduction

    単純な推論が適用されない場合、宣言されていないパラメーターのデータ型は次のように見なされます。If simple deduction does not apply, the following data types are considered for undeclared parameters:

    • 整数データ型 (bittinyintsmallintintbigint)Integer data types (bit, tinyint, smallint, int, bigint)

    • Money データ型 (smallmoneymoney)Money data types (smallmoney, money)

    • 浮動小数点データ型 (floatreal)Floating-point data types (float, real)

    • numeric (38, 19) -その他の数値または decimal データ型は考慮されません。numeric(38, 19) - Other numeric or decimal data types are not considered.

    • varchar (8000)varchar (max)nvarchar (4000)、およびnvarchar (max) -その他の文字列データ型 ( textchar (8000)nvarchar (30) など) は考慮されません。varchar(8000), varchar(max), nvarchar(4000), and nvarchar(max) - Other string data types (such as text, char(8000), nvarchar(30), etc.) are not considered.

    • varbinary (8000)varbinary (max) -その他のバイナリデータ型は考慮されません ( imagebinary (8000)varbinary (30) など)。varbinary(8000) and varbinary(max) - Other binary data types are not considered (such as image, binary(8000), varbinary(30), etc.).

    • datetime (7)smalldatetimedatetimedatetime2 (7)datetimeoffset (7) -その他の日付/時刻型 ( time (4) など) は考慮されません。date, time(7), smalldatetime, datetime, datetime2(7), datetimeoffset(7) - Other date and time types, such as time(4), are not considered.

    • sql_variantsql_variant

    • xmlxml

    • CLR システム定義型 (hierarchyidgeometrygeography)CLR system-defined types (hierarchyid, geometry, geography)

    • CLR ユーザー定義型CLR user-defined types

選択条件Selection Criteria

候補のデータ型のうち、クエリを無効にするデータ型は拒否されます。Of the candidate data types, any data type that would invalidate the query is rejected. 残りの候補のデータ型の場合、型推論アルゴリズムは次の規則に従って1つを選択します。Of the remaining candidate data types, the type deduction algorithm selects one according to the following rules.

  1. E (p) での暗黙的な変換の最小数を生成するデータ型が選択されてい @ ます。The data type that produces the smallest number of implicit conversions in E(@p) is selected. 特定のデータ型によって、TT (p) とは異なる E (p) のデータ型が生成された場合 @ @ 、型推論アルゴリズムは、これを e (p) のデータ型から tt (p) への余分な暗黙の変換と見なし @ @ ます。If a particular data type produces a data type for E(@p) that is different from TT(@p), the type deduction algorithm considers this to be an extra implicit conversion from the data type of E(@p) to TT(@p).

    次に例を示します。For example:

    SELECT * FROM t WHERE Col_Int = Col_Int + @p  
    

    この場合、E ( @ p) は Col_Int + p であり、 @ TT ( @ p) はIntです。暗黙的な変換が生成されないため、p にはintが選択されてい @ ます。In this case, E(@p) is Col_Int + @p and TT(@p) is int. int is chosen for @p because it produces no implicit conversions. その他の任意のデータ型では、少なくとも1つの暗黙的な変換が生成されます。Any other choice of data type produces at least one implicit conversion.

  2. 変換の最小数に対して複数のデータ型が関連付けられている場合は、優先順位の高いデータ型が使用されます。If multiple data types tie for the smallest number of conversions, the data type with greater precedence is used. For example

    SELECT * FROM t WHERE Col_Int = Col_smallint + @p  
    

    この場合、 intsmallintは1つの変換を生成します。In this case, int and smallint produce one conversion. 他のすべてのデータ型では、2 つ以上の変換が生成されます。Every other data type produces more than one conversion. Intsmallintよりも優先されるため、p にはintが使用され @ ます。Because int takes precedence over smallint, int is used for @p. データ型の優先順位の詳細については、「 transact-sql)(データ型の優先順位」を参照してください。For more information about data type precedence, see Data Type Precedence (Transact-SQL).

    このルールは、ルール 1 に該当するすべてのデータ型と、最高位の優先順位を持つデータ型との間に暗黙的な変換がある場合にのみ適用されます。This rule only applies if there is an implicit conversion between every data type that ties according to rule 1 and the data type with the greatest precedence. 暗黙的な変換がない場合、データ型の推論はエラーで失敗します。If there is no implicit conversion, then data type deduction fails with an error. たとえば、クエリでは、 SELECT @p FROM t p の任意のデータ型が同等に適しているため、データ型の推論は失敗し @ ます。For example in the query SELECT @p FROM t, data type deduction fails because any data type for @p would be equally good. たとえば、int からxmlへの暗黙の変換はありません。For example, there is no implicit conversion from int to xml.

  3. 2つの類似したデータ型が rule 1 に関連付けられている場合 ( varchar (8000)varchar (max) など) は、小さい方のデータ型 (varchar (8000)) が選択されます。If two similar data types tie under rule 1, for example varchar(8000) and varchar(max), the smaller data type (varchar(8000)) is chosen. Nvarcharおよびvarbinaryデータ型にも同じ原則が適用されます。The same principle applies to nvarchar and varbinary data types.

  4. ルール 1 のために、型推論アルゴリズムでは、特定の変換が他の変換よりも優先されます。For purposes of rule 1, the type deduction algorithm prefers certain conversions as better than others. 変換の優先順序は、次のとおりです。Conversions in order from best to worst are:

    1. 異なる長さの同じ基本データ型間の変換。Conversion between same basic data type of different length.

    2. 同じデータ型の固定長と可変長のバージョン ( charからvarcharなど) の間の変換。Conversion between fixed-length and variable-length version of same data types (e.g., char to varchar).

    3. NULLintの間の変換です。Conversion between NULL and int.

    4. その他の変換。Any other conversion.

たとえば、クエリの場合 SELECT * FROM t WHERE [Col_varchar(30)] > @p は、変換 (a) が最適であるため、 varchar (8000) が選択されます。For example, for the query SELECT * FROM t WHERE [Col_varchar(30)] > @p, varchar(8000) is chosen because conversion (a) is best. クエリの場合 SELECT * FROM t WHERE [Col_char(30)] > @pvarchar (8000) は型 (b) 変換を発生させるために選択されています。また、別の選択肢 ( varchar (4000) など) によって型 (d) の変換が発生するためです。For the query SELECT * FROM t WHERE [Col_char(30)] > @p, varchar(8000) is still chosen because it causes a type (b) conversion, and because another choice (such as varchar(4000)) would cause a type (d) conversion.

最後の例として、クエリの場合 SELECT NULL + @p は、型 (c) に変換されるため、p に対してintが選択され @ ます。As a final example, given a query SELECT NULL + @p, int is chosen for @p because it results in a type (c) conversion.

アクセス許可Permissions

Tsql 引数を実行する権限が必要です @ 。Requires permission to execute the @tsql argument.

使用例Examples

次の例は、宣言されていない @id パラメーターおよび @name パラメーターに対して予期されるデータ型などの情報を返します。The following example returns information such as the expected data type for the undeclared @id and @name parameters.

sp_describe_undeclared_parameters @tsql =   
N'SELECT object_id, name, type_desc   
FROM sys.indexes  
WHERE object_id = @id OR name = @name'  
  

@id パラメーターが @params 参照として指定された場合は、@id パラメーターは結果セットから省略され、@name パラメーターのみが記述されます。When the @id parameter is provided as a @params reference, the @id parameter is omitted from the result set and only the @name parameter is described.

sp_describe_undeclared_parameters @tsql =   
N'SELECT object_id, name, type_desc   
FROM sys.indexes  
WHERE object_id = @id OR NAME = @name',  
@params = N'@id int'  
  

参照See Also

sp_describe_first_result_set (Transact-sql) sp_describe_first_result_set (Transact-SQL)
dm_exec_describe_first_result_set (Transact-sql) sys.dm_exec_describe_first_result_set (Transact-SQL)
dm_exec_describe_first_result_set_for_object (Transact-sql)sys.dm_exec_describe_first_result_set_for_object (Transact-SQL)