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

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse 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]  

引数Arguments

[ \@tsql = ] 'Transact-SQL\_batch' 1 つまたは複数Transact-SQLTransact-SQLステートメント。[ \@tsql = ] 'Transact-SQL\_batch' One or more Transact-SQLTransact-SQL statements. Transact SQL_batchありますnvarchar ( 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).

1 つの文字列に埋め込まれたすべてのパラメーターの定義を含むTransact SQL_batchします。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 として呼び出された場合は、戻り値の状態は sys.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 sys.types で指定されたパラメーターのデータ型。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.columns を参照してください。See sys.columns. max_length列の説明。for max_length column description.
suggested_precisionsuggested_precision tinyint NOT NULLtinyint NOT NULL Sys.columns を参照してください。See sys.columns. 有効桁数の列の説明。for precision column description.
suggested_scalesuggested_scale tinyint NOT NULLtinyint NOT NULL Sys.columns を参照してください。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 Sys.columns で指定されたパラメーターのデータ型の xml_collection_id を格納します。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 列がない場合に大文字の文字列型で、0 の場合は、1 を返します。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. 例は、ユーザー インターフェイス (ODBCTest または RowsetViewer) など、ユーザーが ODBC パラメーターの構文を使用してクエリを提供します。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-SQLバッチ。If 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-SQLバッチが有効です。Any errors caused by the batch during query optimization or during execution are not considered when determining whether the Transact-SQLTransact-SQL batch is valid.

  • 場合@1 回以上のパラメーターを宣言する文字列が含まれている場合、またはパラメーターが 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.tbl (@p1) + c1 と c2 があるデータ型、および式@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、型推論アルゴリズムは、最も内側の式 E を検索します (@p) を格納している@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.

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

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

型推論アルゴリズムは検索対象のデータ型 TT (@p) e (@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) TT dbo.tbl の宣言された戻り値のデータ型は、(@p2) は dbo.tbl の宣言されたパラメーター データ型です。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、および、型推論アルゴリズムはありません計算対象のデータ型 TT (@p) e (@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) は、型推論アルゴリズムは推測のデータ型を識別、 @p で、次の 2 つの方法のいずれか。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 が直接、式の 1 つの引数は、手順 2. の冒頭に記載されている、型推論アルゴリズムのデータ型を推測@を TT (p@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.tbl の戻り値のデータ型のデータ型になるし、それぞれ dbo.tbl のパラメーター データ型します。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:

    • 整数データ型 (ビットtinyintsmallintintbigint)Integer data types (bit, tinyint, smallint, int, bigint)

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

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

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

    • varchar (8000)varchar (max)nvarchar (4000) 、およびnvarchar (max) - その他の文字列データ型 (などテキストchar (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) -その他のバイナリ データ型は考慮されません (などイメージbinary(8000)varbinary(30) など。)。varbinary(8000) and varbinary(max) - Other binary data types are not considered (such as image, binary(8000), varbinary(30), etc.).

    • 日付time (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. 特定のデータ型が E のデータ型を生成するかどうか (@p) TT とは異なる (@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します。int選択@p ため、暗黙的な変換は生成されません。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. Intよりも優先smallintint使用@p。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. たとえばからの暗黙的変換がないintxmlします。For example, there is no implicit conversion from int to xml.

  3. かどうかのような 2 つのデータ型にリンク付けルール 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. 同じ原則に適用されますnvarcharvarbinaryデータ型。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:

フィードバックをお待ちしております。 この記事の手順やコード例の中で、古い情報や間違っている情報を見つけた場合は、ぜひお知らせください。We are listening: If you find something outdated or incorrect in this article, such as a step or a code example, please tell us. このページの下部にある [フィードバック] セクション内で [このページ] ボタンをクリックしてください。You can click the This page button in the Feedback section at the bottom of this page. SQL に関するフィードバックのすべての項目に目を通しています (通常は翌日)。We read every item of feedback about SQL, typically the next day. よろしくお願いいたします。Thanks.

1.  <span data-ttu-id="61efc-318">長さが異なる同じ基本データ型間の変換。</span><span class="sxs-lookup"><span data-stu-id="61efc-318">Conversion between same basic data type of different length.</span></span>  

2.  <span data-ttu-id="61efc-319">同じデータ型の固定長および可変長のバージョン間の変換 (例: **char**に**varchar**)。</span><span class="sxs-lookup"><span data-stu-id="61efc-319">Conversion between fixed-length and variable-length version of same data types (e.g., **char** to **varchar**).</span></span>  

3.  <span data-ttu-id="61efc-320">間の変換**NULL**と**int**します。</span><span class="sxs-lookup"><span data-stu-id="61efc-320">Conversion between **NULL** and **int**.</span></span>  

4.  <span data-ttu-id="61efc-321">その他の変換。</span><span class="sxs-lookup"><span data-stu-id="61efc-321">Any other conversion.</span></span>  

たとえば、クエリSELECT * FROM t WHERE [Col_varchar(30)] > @pvarchar (8000) 変換 (a) が最適なために選択します。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 + @pint選択@p (c) の型変換の結果となるためです。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)
sys.dm_exec_describe_first_result_set (TRANSACT-SQL) sys.dm_exec_describe_first_result_set (Transact-SQL)
sys.dm_exec_describe_first_result_set_for_object (Transact-SQL)sys.dm_exec_describe_first_result_set_for_object (Transact-SQL)