sp_describe_first_result_set (Transact-SQL)sp_describe_first_result_set (Transact-SQL)

適用対象: ○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

最初の考えられる結果セットのメタデータを返します、Transact-SQLTransact-SQLバッチ。Returns the metadata for the first possible result set of the Transact-SQLTransact-SQL batch. バッチに結果が返されない場合は、設定、空の結果を返します。Returns an empty result set if the batch returns no results. エラーが発生、データベース エンジンDatabase Engine静的分析を実行することによって実行される最初のクエリのメタデータを判断することはできません。Raises an error if the データベース エンジンDatabase Engine cannot determine the metadata for the first query that will be executed by performing a static analysis. 動的管理ビュー sys.dm_exec_describe_first_result_set (TRANSACT-SQL) 同じ情報を返します。The dynamic management view sys.dm_exec_describe_first_result_set (Transact-SQL) returns the same information.

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

構文Syntax

  
sp_describe_first_result_set [ @tsql = ] N'Transact-SQL_batch'   
    [ , [ @params = ] N'parameters' ]   
    [ , [ @browse_information_mode = ] <tinyint> ] ]  

引数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, which is similar to sp_executesql. パラメーターがありますnvarchar (n) またはnvarchar (max) します。Parameters may be nvarchar(n) or nvarchar(max).

1 つの文字列に埋め込まれたすべてのパラメーターの定義を含む、 Transact-SQLTransact-SQL _batchします。Is one string that contains the definitions of all parameters that have been embedded in the Transact-SQLTransact-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. ステートメントで指定されたすべてのパラメーターを定義する必要があります@params します。Every parameter specified in the statement must be defined in @params. 場合、Transact-SQLTransact-SQLステートメントまたはステートメント内のバッチは、パラメーターを含まない@params は必要ありません。If the Transact-SQLTransact-SQL statement or batch in the statement does not contain parameters, @params is not required. NULL は、このパラメーターの既定値です。NULL is the default value for this parameter.

[ \@browse_information_mode = ] tinyint 追加のキー列とソース テーブル情報が返されるかどうかを指定します。[ \@browse_information_mode = ] tinyint Specifies if additional key columns and source table information are returned. 場合は、クエリに FOR BROWSE オプションが含まれている場合に、1、各クエリに設定するが分析されます。If set to 1, each query is analyzed as if it includes a FOR BROWSE option on the query. 追加のキー列とソース テーブル情報が返されます。Additional key columns and source table information are returned.

  • かどうかは 0 に設定すると、情報は返されません。If set to 0, no information is returned.

  • 場合は、クエリに FOR BROWSE オプションが含まれている場合に、1、各クエリに設定するが分析されます。If set to 1, each query is analyzed as if it includes a FOR BROWSE option on the query. ベースのテーブル名がソース列情報として返されます。This will return base table names as the source column information.

  • かどうかは 2 に設定すると、各クエリはように分析は、準備またはカーソルを実行中で使用されます。If set to 2, each query is analyzed as if it would be used in preparing or executing a cursor. ビュー名がソース列情報として返されます。This will return view names as source column information.

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

sp_describe_first_result_set常に成功した場合に 0 の状態を返します。sp_describe_first_result_set always returns a 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, return status is populated by the type of error 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 when there is an error.

結果セットResult Sets

この共通メタデータは、結果のメタデータの各列に対する 1 行の結果セットとして返されます。This common metadata is returned as a result set with one row for each column in the results metadata. 各行には、列の種類と NULL 値の許容属性が次のセクションに示す形式で記述されます。Each row describes the type and nullability of the column in the format described in the following section. 最初のステートメントは、各コントロールのパスが存在しない場合は、0 行を含む結果セットが返されます。If the first statement does not exist for every control path, a result set with zero rows is returned.

列名Column name データ型Data type 説明Description
is_hiddenis_hidden bit NOT NULLbit NOT NULL 列が、参照情報のために追加された追加の列であると、それが表示されないこと実際に結果セットを示します。Indicates that the column is an extra column added for browsing information purposes and that it does not actually appear in the result set.
column_ordinalcolumn_ordinal int NOT NULLint NOT NULL 結果セット内の列の位置を示す序数を格納します。Contains the ordinal position of the column in the result set. 最初の列の位置は 1 として指定されます。The first column's position will be specified as 1.
namename sysname NULLsysname NULL 列の名前を確認できる場合は、その名前を格納します。Contains the name of the column if a name can be determined. それ以外の場合、NULL が含まれます。Otherwise, it will contain NULL.
is_nullableis_nullable bit NOT NULLbit NOT NULL 列は Null を許可する場合に特定できない場合に、Null を列に Null を許容しない場合は 0 と 1 を許可する場合は、値 1 が含まれています。Contains the value 1 if the column allows NULLs, 0 if the column does not allow NULLs, and 1 if it cannot be determined if the column allows NULLs.
system_type_idsystem_type_id int NOT NULLint NOT NULL Sys.types で指定された列のデータ型の system_type_id を格納します。Contains the system_type_id of the data type of the column 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.
system_type_namesystem_type_name nvarchar(256) NULLnvarchar(256) NULL 列のデータ型に指定されている名前と引数 (長さ、有効桁数、小数点以下桁数など) を格納します。Contains the name and arguments (such as length, precision, scale), specified for the data type of the column. データ型がユーザー定義の別名型の場合は、基になるシステム型がここで指定されます。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 type, NULL is returned in this column.
max_lengthmax_length smallint NOT NULLsmallint NOT NULL 列の最大長 (バイト単位) です。Maximum length (in bytes) of the column.

-1 = 列のデータ型はvarchar (max)nvarchar (max)varbinary (max) 、またはxmlします。-1 = Column data type is varchar(max), nvarchar(max), varbinary(max), or xml.

テキスト、列、 max_length値は 16 かによって設定された値になりますsp_tableoption 'text in row' します。For text columns, the max_length value will be 16 or the value set by sp_tableoption 'text in row'.
有効桁数 (precision)precision tinyint NOT NULLtinyint NOT NULL 数値ベースの場合は、列の有効桁数です。Precision of the column if numeric-based. それ以外の場合 0 を返します。Otherwise returns 0.
scalescale tinyint NOT NULLtinyint NOT NULL 数値ベースの場合は、列の小数点以下桁数です。Scale of column if numeric-based. それ以外の場合 0 を返します。Otherwise returns 0.
collation_namecollation_name sysname NULLsysname NULL 文字ベースの場合は、列の照合順序の名前です。Name of the collation of the column if character-based. それ以外の場合、NULL を返します。Otherwise returns NULL.
user_type_iduser_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.
user_type_databaseuser_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.
user_type_schemauser_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.
user_type_nameuser_type_name sysname NULLsysname NULL CLR 型と別名型の場合、その型の名前を格納します。For CLR and alias types, contains the name of the type. それ以外の場合は NULL です。Otherwise is NULL.
assembly_qualified_type_nameassembly_qualified_type_name nvarchar (4000)nvarchar(4000) CLR 型の場合、その型を定義するアセンブリの名前とクラスを返します。For CLR types, returns the name of the assembly and class defining the type. それ以外の場合は NULL です。Otherwise is NULL.
xml_collection_idxml_collection_id int NULLint NULL sys.columns で指定された列のデータ型の xml_collection_id を格納します。Contains the xml_collection_id of the data type of the column as specified in sys.columns. この列は、返される型が XML スキーマ コレクションに関連付けられていない場合は NULL を返します。This column will return NULL if the type returned is not associated with an XML schema collection.
xml_collection_databasexml_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.
xml_collection_schemaxml_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.
xml_collection_namexml_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.
is_xml_documentis_xml_document bit NOT NULLbit NOT NULL 返されたデータ型が XML で、その型が XML フラグメントではなく完全な XML ドキュメント (ルート ノードを含む) であると保証される場合、1 を返します。Returns 1 if the returned data type is XML and that type is guaranteed to be a complete XML document (including a root node), as opposed to an XML fragment). それ以外の場合 0 を返します。Otherwise returns 0.
is_case_sensitiveis_case_sensitive bit NOT NULLbit NOT NULL されていない場合、列が大文字の文字列型で、0 の場合は、1 を返します。Returns 1 if the column is a case-sensitive string type and 0 if it is not.
is_fixed_length_clr_typeis_fixed_length_clr_type bit NOT NULLbit NOT NULL されていない場合、列が固定長の CLR 型と 0 の場合は、1 を返します。Returns 1 if the column is a fixed-length CLR type and 0 if it is not.
source_serversource_server sysnamesysname この結果内の列によって返された元のサーバーの名前です (リモート サーバーから発生する場合)。Name of the originating server returned by the column in this result (if it originates from a remote server). Sys.servers に表示される、名前が与えられます。The name is given as it appears in sys.servers. この列がローカル サーバー上で発生した場合、または元のサーバーを特定できない場合は NULL を返します。Returns NULL if the column originates on the local server or if it cannot be determined which server it originates on. 参照情報が要求された場合にのみ設定されます。Is only populated if browsing information is requested.
source_databasesource_database sysnamesysname この結果内の列によって返された元のデータベースの名前です。Name of the originating database returned by the column in this result. データベースを特定できない場合は NULL を返します。Returns NULL if the database cannot be determined. 参照情報が要求された場合にのみ設定されます。Is only populated if browsing information is requested.
source_schemasource_schema sysnamesysname この結果内の列によって返された元のスキーマの名前です。Name of the originating schema returned by the column in this result. スキーマを特定できない場合は NULL を返します。Returns NULL if the schema cannot be determined. 参照情報が要求された場合にのみ設定されます。Is only populated if browsing information is requested.
source_tablesource_table sysnamesysname この結果内の列によって返された元のテーブルの名前です。Name of the originating table returned by the column in this result. テーブルを特定できない場合は NULL を返します。Returns NULL if the table cannot be determined. 参照情報が要求された場合にのみ設定されます。Is only populated if browsing information is requested.
source_columnsource_column sysnamesysname 結果列から返された元の列の名前です。Name of the originating column returned by the result column. 列を特定できない場合は NULL を返します。Returns NULL if the column cannot be determined. 参照情報が要求された場合にのみ設定されます。Is only populated if browsing information is requested.
is_identity_columnis_identity_column bit NULLbit NULL この列が ID 列の場合は 1、それ以外の場合は 0 を返します。Returns 1 if the column is an identity column and 0 if not. ID 列であることを確認できない場合は NULL を返します。Returns NULL if it cannot be determined that the column is an identity column.
is_part_of_unique_keyis_part_of_unique_key bit NULLbit NULL この列が一意インデックス (一意制約と主キー制約を含む) の一部である場合は 1、それ以外の場合は 0 を返します。Returns 1 if the column is part of a unique index (including unique and primary constraint) and 0 if not. 一意インデックスの一部であることを確認できない場合は NULL を返します。Returns NULL if it cannot be determined that the column is part of a unique index. 参照情報が要求された場合にのみ設定されます。Only populated if browsing information is requested.
is_updateableis_updateable bit NULLbit NULL この列が更新可能である場合は 1、それ以外の場合は 0 を返します。Returns 1 if the column is updateable and 0 if not. 更新可能であることを確認できない場合は NULL を返します。Returns NULL if it cannot be determined that the column is updateable.
is_computed_columnis_computed_column bit NULLbit NULL この列が計算列の場合は 1、それ以外の場合は 0 を返します。Returns 1 if the column is a computed column and 0 if not. 列が計算列を特定できない場合は、NULL を返します。Returns NULL if it cannot be determined that the column is a computed column.
is_sparse_column_setis_sparse_column_set bit NULLbit NULL この列がスパース列の場合は 1、それ以外の場合は 0 を返します。Returns 1 if the column is a sparse column and 0 if not. 列がスパース列セットの一部であることを特定できない場合は、NULL を返します。Returns NULL if it cannot be determined that the column is part of a sparse column set.
ordinal_in_order_by_listordinal_in_order_by_list smallint NULLsmallint NULL ORDER BY リストにおけるこの列の位置。Position of this column in ORDER BY list. 列が ORDER BY リストに表示されない場合、または ORDER BY リストを一意に特定できない場合は、NULL を返します。Returns NULL if the column does not appear in the ORDER BY list or if the ORDER BY list cannot be uniquely determined.
order_by_list_lengthorder_by_list_length smallint NULLsmallint NULL ORDER BY リストの長さを返します。Length of the ORDER BY list. ORDER BY リストがない場合、または ORDER BY リストを一意に特定できない場合は NULL を返します。Returns NULL if there is no ORDER BY list or if the ORDER BY list cannot be uniquely determined. この値がによって返されるすべての行で同じになることに注意してください。 sp_describe_first_result_set します。Note that this value will be the same for all rows returned by sp_describe_first_result_set.
order_by_is_descendingorder_by_is_descending smallint NULLsmallint NULL Ordinal_in_order_by_list が NULL でない場合、 order_by_is_descending列は、この列の ORDER BY 句の方向を報告します。If the ordinal_in_order_by_list is not NULL, the order_by_is_descending column reports the direction of the ORDER BY clause for this column. それ以外の場合は、NULL が報告されます。Otherwise it reports NULL.
tds_type_idtds_type_id int NOT NULLint NOT NULL 内部使用です。For internal use.
tds_lengthtds_length int NOT NULLint NOT NULL 内部使用です。For internal use.
tds_collation_idtds_collation_id int NULLint NULL 内部使用です。For internal use.
tds_collation_sort_idtds_collation_sort_id tinyint NULLtinyint NULL 内部使用です。For internal use.

コメントRemarks

sp_describe_first_result_setこと、プロシージャが (仮定) の最初の結果セットのメタデータを返す場合バッチ A と、そのバッチ (A) が、その後実行し、バッチの保証は (1) 最適化時エラーを発生させます (2)発生させ、実行時のエラー (3) 返します結果はありませんセット、または (4) で説明されている同じメタデータを持つ最初の結果が設定sp_describe_first_result_setします。sp_describe_first_result_set guarantees that if the procedure returns the first result-set metadata for (a hypothetical) batch A and if that batch (A) is subsequently executed then the batch will either (1) raises an optimization-time error, (2) raises a run-time error, (3) returns no result set, or (4) returns a first result set with the same metadata described by sp_describe_first_result_set.

名前、NULL 値の許容属性、およびデータ型が異なる可能性があります。The name, nullability, and data type can differ. 場合sp_describe_first_result_setバッチ実行の結果セットが返される保証は、空の結果セットを返します。If sp_describe_first_result_set returns an empty result set, the guarantee is that the batch execution will return no-result sets.

この保証では、サーバーに関連するスキーマの変更がないと仮定します。This guarantee presumes there are no relevant schema changes on the server. サーバーに関連するスキーマ変更したりしないでください一時テーブルの作成は、テーブル間のバッチ A で変数をsp_describe_first_result_set呼びますと中に返される結果セット時刻B. バッチによるスキーマ変更をなどの実行Relevant schema changes on the server do not include creating a temporary tables or table variables in the batch A between the time that sp_describe_first_result_set is called and the time that the result set is returned during execution, including schema changes made by batch B.

sp_describe_first_result_set場合は、次のいずれかでエラーが返されます。sp_describe_first_result_set 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 uses a temporary table.

  • クエリには、クエリを実行し、永続的なテーブルの作成が含まれています。The query includes the creation of a permanent table that is then queried.

その他のすべてのチェックが成功した場合、入力バッチ内のすべての制御フロー パスと見なされます。If all other checks succeed, all possible control flow paths inside the input batch are considered. このを考慮に入れたすべての制御フロー ステートメント (GOTO、IF/ELSE、WHILE、およびTransact-SQLTransact-SQLTRY/CATCH ブロック)、プロシージャは、動的とTransact-SQLTransact-SQLバッチ、または EXEC ステートメント、DDL ステートメントをして入力バッチから呼び出されたトリガー発生させる DDL トリガーまたは対象のテーブルまたはテーブルが外部キー制約のカスケード操作により変更されるトリガーを起動する DML ステートメント。This takes into account all control flow statements (GOTO, IF/ELSE, WHILE, and Transact-SQLTransact-SQL TRY/CATCH blocks) as well as any procedures, dynamic Transact-SQLTransact-SQL batches, or triggers invoked from the input batch by an EXEC statement, a DDL statement that causes DDL triggers to be fired, or a DML statement that causes triggers to be fired on a target table or on a table that is modified because of cascading action on a foreign key constraint. 多くの可能なコントロール パスの場合はある時点でアルゴリズムを停止します。In the case of many possible control paths, at some point an algorithm stops.

各制御フロー パスの最初のステートメント (あれば) を返す結果セットが続くsp_describe_first_result_setします。For each control flow path, the first statement (if any) that returns a result set is determined by sp_describe_first_result_set.

複数の使用可能な最初のステートメントがバッチ内で見つかったときにその結果できます列、列名、null 許容属性、およびデータ型の数が異なります。When multiple possible first statements are found in a batch, their results can differ in number of columns, column name, nullability, and data type. これらの違いを処理する方法の詳細について、ここに記載します。How these differences are handled is described in more detail here:

  • 列の数が異なる場合は、エラーがスローされ、結果は返されません。If the number of columns differs, an error is thrown and no result is returned.

  • 列名が異なる場合は、返される列名が NULL に設定されます。If the column name differs, the column name returned is set to NULL.

  • Null 値の許容とは異なること返される null 値許容属性が Null を許容します。It the nullability differs, the nullability returned will allow NULLs.

  • データ型が異なる場合は、エラーがスローされ、次の場合を除いて結果は返されません。If the data type differs, an error will be thrown and no result is returned except for the following cases:

    • varchar (a)varchar(a') 場所、' > をします。varchar(a) to varchar(a') where a' > a.

    • varchar (a)varchar (max)varchar(a) to varchar(max)

    • nvarchar (a)nvarchar(a') 場所、' > をします。nvarchar(a) to nvarchar(a') where a' > a.

    • nvarchar (a)nvarchar (max)nvarchar(a) to nvarchar(max)

    • varbinary (a)varbinary(a') 場所、' > をします。varbinary(a) to varbinary(a') where a' > a.

    • varbinary (a)varbinary (max)varbinary(a) to varbinary(max)

sp_describe_first_result_setは間接再帰をサポートしていません。sp_describe_first_result_set does not support indirect recursion.

アクセス許可Permissions

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

使用例Examples

一般的な例Typical Examples

A.A. 簡単な例Simple Example

次の例では、1 つのクエリから返される結果について説明します。The following example describes the result set returned from a single query.

sp_describe_first_result_set @tsql = N'SELECT object_id, name, type_desc FROM sys.indexes'  

次の例では、パラメーターを含む 1 つのクエリから返される結果を示します。The following example shows the result set returned from a single query that contains a parameter.

sp_describe_first_result_set @tsql =   
N'SELECT object_id, name, type_desc   
FROM sys.indexes   
WHERE object_id = @id1'  
, @params = N'@id1 int'  

B.B. ブラウズ モードの使用例Browse Mode Examples

次の 3 つの例では、異なるブラウズ情報モード間の主要な違いを示します。The following three examples illustrate the key difference between the different browse information modes. クエリ結果には、関係する列だけが含まれています。Only the relevant columns have been included in the query results.

情報がないことを示します。 0 の使用例が返されます。Example using 0 indicating no information is returned.

CREATE TABLE dbo.t (a int PRIMARY KEY, b1 int);  
GO  
CREATE VIEW dbo.v AS SELECT b1 AS b2 FROM dbo.t;  
GO  
EXEC sp_describe_first_result_set N'SELECT b2 AS b3 FROM dbo.v', null, 0;  

以下に結果セットを示します。Here is the result set.

is_hiddenis_hidden column_ordinalcolumn_ordinal NAMEname source_schemasource_schema ソース テーブルsource_table source_columnsource_column is_part_of_unique_keyis_part_of_unique_key
00 11 b3b3 NULLNULL NULLNULL NULLNULL NULLNULL

1 示すを使用した例は、クエリに FOR BROWSE オプションが含まれている場合、情報を返します。Example using 1 indicating it returns information as if it includes a FOR BROWSE option on the query.

EXEC sp_describe_first_result_set N'SELECT b2 AS b3 FROM v', null, 1  
  

以下に結果セットを示します。Here is the result set.

is_hiddenis_hidden column_ordinalcolumn_ordinal NAMEname source_schemasource_schema ソース テーブルsource_table source_columnsource_column is_part_of_unique_keyis_part_of_unique_key
00 11 b3b3 dbodbo tt B1B1 00
11 22 aa dbodbo tt aa 11

カーソルを準備する場合、分析対象を示す 2 を使用する例です。Example using 2 indicating analyzed as if you are preparing a cursor.

EXEC sp_describe_first_result_set N'SELECT b2 AS b3 FROM v', null, 2  

以下に結果セットを示します。Here is the result set.

is_hiddenis_hidden column_ordinalcolumn_ordinal NAMEname source_schemasource_schema ソース テーブルsource_table source_columnsource_column is_part_of_unique_keyis_part_of_unique_key
00 11 B3B3 dbodbo vv B2B2 00
11 22 ROWSTATROWSTAT NULLNULL NULLNULL NULLNULL 00

問題の例Examples of problems

以下の例では、すべて 2 つのテーブルを使用します。The following examples use two tables for all examples. 次のステートメントを実行して、これらのテーブルを作成します。Execute the following statements to create the example tables.

CREATE TABLE dbo.t1 (a int NULL, b varchar(10) NULL, c nvarchar(10) NULL);  
CREATE TABLE dbo.t2 (a smallint NOT NULL, d varchar(20) NOT NULL, e int NOT NULL);  

列の数の違いによるエラーError because the number of columns differ

この例では最初の結果セットが異なるできるだけの列の数。Number of columns in possible first result sets differ in this example.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT a FROM t1;  
ELSE  
    SELECT a, b FROM t1;  
SELECT * FROM t; -- Ignored, not a possible first result set.'  
  

データ型の違いによるエラーError because the data types differ

考えられる最初の結果セットの間で、列の型が異なります。Columns types differ in different possible first result sets.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT a FROM t1;  
ELSE  
    SELECT a FROM t2;  

結果:エラー、型の不一致 (intsmallint)。Result: Error, mismatching types (int vs. smallint).

列名を確認することはできません。Column name cannot be determined

可能な最初の結果セットが異なる同じ可変長型、null 許容属性、および列名の長さの列:Columns in possible first result sets differ by length for same variable length type, nullability, and column names:

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT b FROM t1;  
ELSE  
    SELECT d FROM t2; '  

結果:<不明な列名 > varchar (20) NULLResult: <Unknown Column Name> varchar(20) NULL

別名の指定と同じでなければ強制的に列名Column name forced to be identical through aliasing

前の例と同じですが、列の別名を使用して列名を同じにしています。Same as previous, but columns have the same name through column aliasing.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT b FROM t1;  
ELSE  
    SELECT d AS b FROM t2;'  

Result: b varchar(20)NULLResult: b varchar(20)NULL

エラー列の型が一致することはできませんので、Error because column types cannot be matched

考えられる、異なる列の型が異なる最初の結果セット。The columns types differ in different possible first result sets.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    SELECT b FROM t1;  
ELSE  
    SELECT c FROM t1;'  

結果:エラー、型の不一致 (varchar (10)nvarchar (10) )。Result: Error, mismatching types (varchar(10) vs. nvarchar(10)).

結果セットはエラーを返すことができます。Result set can return an error

最初の結果セットはエラーまたは結果セットです。First result set is either error or result set.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    RAISERROR(''Some Error'', 16, 1);  
  
ELSE  
    SELECT a FROM t1;  
SELECT e FROM t2; -- Ignored, not a possible first result set.;'  

結果: intNULLResult: a intNULL

一部のコード パスに結果が返されないSome code paths return no results

最初の結果セットが null または結果セットです。First result set is either null or a result set.

sp_describe_first_result_set @tsql =   
N'  
IF(1=1)  
    RETURN;  
SELECT a FROM t1;'  

結果: intNULLResult: a intNULL

動的 SQL からの結果します。Result from dynamic SQL

最初の結果セットは、リテラル文字列であるために、探索可能な動的 SQL です。First result set is dynamic SQL that is discoverable because it is a literal string.

sp_describe_first_result_set @tsql =   
N'EXEC(N''SELECT a FROM t1'');'  

結果: INT NULLResult: a INT NULL

動的 SQL からの結果の失敗Result failure from dynamic SQL

動的 SQL のため、最初の結果セットが未定義となります。First result set is undefined because of dynamic SQL.

sp_describe_first_result_set @tsql =   
N'  
DECLARE @SQL NVARCHAR(max);  
SET @SQL = N''SELECT a FROM t1 WHERE 1 = 1 '';  
IF(1=1)  
    SET @SQL += N'' AND e > 10 '';  
EXEC(@SQL); '  

結果:エラー状態。Result: Error. 動的 SQL のため結果を検出できません。Result is not discoverable because of the dynamic SQL.

ユーザー指定の結果セットResult set specified by user

最初の結果セットがユーザーにより手動で指定されています。First result set is specified manually by user.

sp_describe_first_result_set @tsql =   
N'  
DECLARE @SQL NVARCHAR(max);  
SET @SQL = N''SELECT a FROM t1 WHERE 1 = 1 '';  
IF(1=1)  
    SET @SQL += N'' AND e > 10 '';  
EXEC(@SQL)  
    WITH RESULT SETS(  
        (Column1 BIGINT NOT NULL)  
    ); '  

結果:Column1 bigint NOT NULLResult: Column1 bigint NOT NULL

あいまいな結果セットによるエラーError caused by a ambiguous result set

この例では、user1 という名前の別のユーザーが列を含む既定のスキーマ s1 内の t1 という名前のテーブル (、 int NOT NULL)。This example assumes that another user named user1 has a table named t1 in the default schema s1 with columns (a int NOT NULL).

sp_describe_first_result_set @tsql =   
N'  
    IF(@p > 0)  
    EXECUTE AS USER = ''user1'';  
    SELECT * FROM t1;'  
, @params = N'@p int'  

結果:エラー状態。Result: Error. t1 は dbo.t1 または s1.t1、それぞれ異なる数の列のいずれかを指定できます。t1 can be either dbo.t1 or s1.t1, each with a different number of columns.

あいまいな結果セットを使用しても結果します。Result even with ambiguous result set

前の例と同じ前提を使用します。Use the same assumptions as the previous example.

sp_describe_first_result_set @tsql =   
N'  
    IF(@p > 0)  
    EXECUTE AS USER = ''user1'';  
    SELECT a FROM t1;'  

結果: int NULL dbo.t1.a と s1.t1.a 型であるため、 intと異なる null 許容属性。Result: a int NULL because both dbo.t1.a and s1.t1.a have type int and different nullability.

関連項目See Also

sp_describe_undeclared_parameters (TRANSACT-SQL) sp_describe_undeclared_parameters (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)