sql >> データベース >  >> RDS >> Sqlserver

sys.dm_exec_describe_first_result_setがSQLServerでどのように機能するか

    SQL Serverでは、sys.dm_exec_describe_first_result_set 動的管理関数は、特定のT-SQLステートメントの最初の結果セットのメタデータを返します。

    この関数は、sp_describe_first_result_setと同じアルゴリズムを使用します システムストアドプロシージャであり、ほぼ同じことを行います。

    3つのパラメーターを受け入れます。最初のパラメーターは、分析しているT-SQLステートメントです。

    構文

    構文は次のようになります:

    sys.dm_exec_describe_first_result_set(@tsql, @params, @include_browse_information)

    実例を示します。

    SELECT * 
    FROM sys.dm_exec_describe_first_result_set(
        N'SELECT * FROM Artists', 
        null, 
        0
    );

    結果:

    +-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+
    | is_hidden   | column_ordinal   | name       | is_nullable   | system_type_id   | system_type_name   | max_length   | precision   | scale   | collation_name               | user_type_id   | user_type_database   | user_type_schema   | user_type_name   | assembly_qualified_type_name   | xml_collection_id   | xml_collection_database   | xml_collection_schema   | xml_collection_name   | is_xml_document   | is_case_sensitive   | is_fixed_length_clr_type   | source_server   | source_database   | source_schema   | source_table   | source_column   | is_identity_column   | is_part_of_unique_key   | is_updateable   | is_computed_column   | is_sparse_column_set   | ordinal_in_order_by_list   | order_by_is_descending   | order_by_list_length   | error_number   | error_severity   | error_state   | error_message   | error_type   | error_type_desc   |
    |-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------|
    | 0           | 1                | ArtistId   | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | NULL              | NULL            | NULL           | NULL            | 1                    | NULL                    | 0               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
    | 0           | 2                | ArtistName | 0             | 231              | nvarchar(255)      | 510          | 0           | 0       | SQL_Latin1_General_CP1_CI_AS | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | NULL              | NULL            | NULL           | NULL            | 0                    | NULL                    | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
    | 0           | 3                | ActiveFrom | 1             | 40               | date               | 3            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | NULL              | NULL            | NULL           | NULL            | 0                    | NULL                    | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
    +-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+

    この関数はかなりの数の列を返すため、すべてを表示するには横にスクロールする必要があります。返された各列の説明については、Microsoftのドキュメントを確認してください。

    ブラウズモード

    3番目の引数– @include_browse_information –追加のキー列とソーステーブル情報を返すかどうかを指定します。

    この引数には、次の値が受け入れられます。

    結果
    0 情報は返されません。
    1 各クエリは、FOR BROWSEが含まれているかのように分析されます。 クエリのオプション。これにより、ソース列情報としてベーステーブル名が返されます。
    2 各クエリは、カーソルの準備または実行に使用されるかのように分析されます。これにより、ビュー名がソース列情報として返されます。

    以下は、これらの各値が結果にどのように影響するかを示す例です。

    わかりやすくするために、T-SQLステートメントを変更して1つの列のみを返すようにします。

    sys.dm_exec_describe_first_result_setに関するMicrosoftのドキュメントに言及する必要があります 0の2つの値のみを参照します および1 。ただし、sp_describe_first_result_setのドキュメント 次の3つの値を指定します:01 、および2 、上記の表にリストされているように。

    sys.dm_exec_describe_first_result_setのドキュメント また、sp_describe_first_result_setと同じアルゴリズムを使用しているとも述べています 。

    また、SQLServer2017とSQLServer2019の両方でこの関数を確認しましたが、このパラメーターは実際には tinyint です 、これは、3つ以上の値を受け入れるように設計されていることを示しています。

    いずれにせよ、次の例には3つの値すべてが含まれています。

    @include_browse_information = 0

    この例では、@include_browse_informationを設定します 0へ 。

    SELECT * 
    FROM sys.dm_exec_describe_first_result_set(
        N'SELECT AlbumName FROM vAlbums', 
        null, 
        0
    );

    結果(垂直出力を使用):

    is_hidden                    | 0
    column_ordinal               | 1
    name                         | AlbumName
    is_nullable                  | 0
    system_type_id               | 231
    system_type_name             | nvarchar(255)
    max_length                   | 510
    precision                    | 0
    scale                        | 0
    collation_name               | SQL_Latin1_General_CP1_CI_AS
    user_type_id                 | NULL
    user_type_database           | NULL
    user_type_schema             | NULL
    user_type_name               | NULL
    assembly_qualified_type_name | NULL
    xml_collection_id            | NULL
    xml_collection_database      | NULL
    xml_collection_schema        | NULL
    xml_collection_name          | NULL
    is_xml_document              | 0
    is_case_sensitive            | 0
    is_fixed_length_clr_type     | 0
    source_server                | NULL
    source_database              | NULL
    source_schema                | NULL
    source_table                 | NULL
    source_column                | NULL
    is_identity_column           | 0
    is_part_of_unique_key        | NULL
    is_updateable                | 1
    is_computed_column           | 0
    is_sparse_column_set         | 0
    ordinal_in_order_by_list     | NULL
    order_by_is_descending       | NULL
    order_by_list_length         | NULL
    error_number                 | NULL
    error_severity               | NULL
    error_state                  | NULL
    error_message                | NULL
    error_type                   | NULL
    error_type_desc              | NULL

    かなりの数の列がNULLであることに注意してください 。特に、source_databaseに注意してください。 、source_schemasource_table 、およびsource_column 列はNULLです 。

    これらの列はNULLにはなりません 次の2つの例では、2つの異なる結果が生成されます。

    @include_browse_information = 1

    この例では、@include_browse_informationを設定します 1へ 。

    SELECT * 
    FROM sys.dm_exec_describe_first_result_set(
        N'SELECT AlbumName FROM vAlbums', 
        null, 
        1
    );

    @include_browse_informationを設定する 1FOR BROWSEが含まれているかのように結果を返します クエリのオプション。

    この場合、これにより4つの行が返されます(ベーステーブルの4つの列を表します)。

    返される4つの行は次のとおりです。

    +-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+
    | is_hidden   | column_ordinal   | name      | is_nullable   | system_type_id   | system_type_name   | max_length   | precision   | scale   | collation_name               | user_type_id   | user_type_database   | user_type_schema   | user_type_name   | assembly_qualified_type_name   | xml_collection_id   | xml_collection_database   | xml_collection_schema   | xml_collection_name   | is_xml_document   | is_case_sensitive   | is_fixed_length_clr_type   | source_server   | source_database   | source_schema   | source_table   | source_column   | is_identity_column   | is_part_of_unique_key   | is_updateable   | is_computed_column   | is_sparse_column_set   | ordinal_in_order_by_list   | order_by_is_descending   | order_by_list_length   | error_number   | error_severity   | error_state   | error_message   | error_type   | error_type_desc   |
    |-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------|
    | 0           | 1                | AlbumName | 0             | 231              | nvarchar(255)      | 510          | 0           | 0       | SQL_Latin1_General_CP1_CI_AS | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Albums         | AlbumName       | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
    | 1           | 2                | ArtistId  | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Artists        | ArtistId        | 0                    | 1                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
    | 1           | 3                | AlbumId   | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Albums         | AlbumId         | 0                    | 1                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
    | 1           | 4                | GenreId   | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Genres         | GenreId         | 0                    | 1                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
    +-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+

    したがって、プロシージャに渡したT-SQLクエリで1つの列のみを指定したにもかかわらず、4つの列の情報が返されました。これらは、vAlbumsによって参照される4つの列です。 ビュー。

    横にスクロールすると、source_databaseが表示されます。 、source_schemasource_table 、およびsource_column 列はNULLではなくなりました 。 source_serverもそうではありません 桁。ビューによってクエリされたベースオブジェクトに関する情報を提供します。

    見やすくするために、1行(1列を表す)のみで垂直出力を使用しましょう:

    is_hidden                    | 0
    column_ordinal               | 1
    name                         | AlbumName
    is_nullable                  | 0
    system_type_id               | 231
    system_type_name             | nvarchar(255)
    max_length                   | 510
    precision                    | 0
    scale                        | 0
    collation_name               | SQL_Latin1_General_CP1_CI_AS
    user_type_id                 | NULL
    user_type_database           | NULL
    user_type_schema             | NULL
    user_type_name               | NULL
    assembly_qualified_type_name | NULL
    xml_collection_id            | NULL
    xml_collection_database      | NULL
    xml_collection_schema        | NULL
    xml_collection_name          | NULL
    is_xml_document              | 0
    is_case_sensitive            | 0
    is_fixed_length_clr_type     | 0
    source_server                | Homer
    source_database              | Music
    source_schema                | dbo
    source_table                 | Albums
    source_column                | AlbumName
    is_identity_column           | 0
    is_part_of_unique_key        | 0
    is_updateable                | 1
    is_computed_column           | 0
    is_sparse_column_set         | 0
    ordinal_in_order_by_list     | NULL
    order_by_is_descending       | NULL
    order_by_list_length         | NULL
    error_number                 | NULL
    error_severity               | NULL
    error_state                  | NULL
    error_message                | NULL
    error_type                   | NULL
    error_type_desc              | NULL

    source_serversource_databasesource_schemasource_table 、およびsource_column 列は、ビューで参照される基になるサーバー、データベース、スキーマ、テーブル、および列に関する情報を提供するようになりました。

    私の場合、ビューはリンクされたサーバー全体でテーブルを照会します。したがって、ベーステーブルは別のデータベースの別のサーバーにあります。

    対照的に、@include_browse_informationを設定すると 2へ 次の例では、ビューに実際の列を取得します。

    @include_browse_information = 2

    最後に、@include_browse_informationを設定しましょう 2へ 。

    SELECT * 
    FROM sys.dm_exec_describe_first_result_set(
        N'SELECT AlbumName FROM vAlbums', 
        null, 
        2
    );

    この場合、クエリは、カーソルの準備または実行に使用されるかのように分析されます。

    今回は、2行のみが返されます:

    +-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+
    | is_hidden   | column_ordinal   | name      | is_nullable   | system_type_id   | system_type_name   | max_length   | precision   | scale   | collation_name               | user_type_id   | user_type_database   | user_type_schema   | user_type_name   | assembly_qualified_type_name   | xml_collection_id   | xml_collection_database   | xml_collection_schema   | xml_collection_name   | is_xml_document   | is_case_sensitive   | is_fixed_length_clr_type   | source_server   | source_database   | source_schema   | source_table   | source_column   | is_identity_column   | is_part_of_unique_key   | is_updateable   | is_computed_column   | is_sparse_column_set   | ordinal_in_order_by_list   | order_by_is_descending   | order_by_list_length   | error_number   | error_severity   | error_state   | error_message   | error_type   | error_type_desc   |
    |-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------|
    | 0           | 1                | AlbumName | 0             | 231              | nvarchar(255)      | 510          | 0           | 0       | SQL_Latin1_General_CP1_CI_AS | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | Test              | dbo             | vAlbums        | AlbumName       | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
    | 1           | 2                | ROWSTAT^@   | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | NULL              | NULL            | NULL           | NULL            | 0                    | 0                       | 0               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
    +-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+

    また、横にスクロールする必要がないように、垂直出力の最初の行は次のとおりです。

    is_hidden                    | 0
    column_ordinal               | 1
    name                         | AlbumName
    is_nullable                  | 0
    system_type_id               | 231
    system_type_name             | nvarchar(255)
    max_length                   | 510
    precision                    | 0
    scale                        | 0
    collation_name               | SQL_Latin1_General_CP1_CI_AS
    user_type_id                 | NULL
    user_type_database           | NULL
    user_type_schema             | NULL
    user_type_name               | NULL
    assembly_qualified_type_name | NULL
    xml_collection_id            | NULL
    xml_collection_database      | NULL
    xml_collection_schema        | NULL
    xml_collection_name          | NULL
    is_xml_document              | 0
    is_case_sensitive            | 0
    is_fixed_length_clr_type     | 0
    source_server                | NULL
    source_database              | Test
    source_schema                | dbo
    source_table                 | vAlbums
    source_column                | AlbumName
    is_identity_column           | 0
    is_part_of_unique_key        | 0
    is_updateable                | 1
    is_computed_column           | 0
    is_sparse_column_set         | 0
    ordinal_in_order_by_list     | NULL
    order_by_is_descending       | NULL
    order_by_list_length         | NULL
    error_number                 | NULL
    error_severity               | NULL
    error_state                  | NULL
    error_message                | NULL
    error_type                   | NULL
    error_type_desc              | NULL

    この例では、source_table 列には、ベーステーブルではなく実際のビュー名と、source_databaseが含まれます ビューを照会したローカルデータベースの名前です。また、source_column ベーステーブルの列ではなく、ビューからクエリした列です。

    @params 引数

    これまで、@paramsを使用したのは の引数は、NULLに設定することです 。

    分析しているSQLバッチにパラメータが含まれている場合は、@paramsを使用します それらのパラメータを宣言する関数。

    これは、sp_executesqlを使用するときにパラメータを宣言する方法と同様に機能します。 手順。

    @paramsを使用してパラメータを宣言する例を次に示します。 引数。

    SELECT * 
    FROM sys.dm_exec_describe_first_result_set(
        N'SELECT ArtistName FROM Homer.Music.dbo.Artists WHERE ArtistId = @ArtistId', 
        N'@ArtistId int', 
        1
    );

    結果(垂直出力を使用):

    -[ RECORD 1 ]-------------------------
    is_hidden                    | 0
    column_ordinal               | 1
    name                         | ArtistName
    is_nullable                  | 0
    system_type_id               | 231
    system_type_name             | nvarchar(255)
    max_length                   | 510
    precision                    | 0
    scale                        | 0
    collation_name               | SQL_Latin1_General_CP1_CI_AS
    user_type_id                 | NULL
    user_type_database           | NULL
    user_type_schema             | NULL
    user_type_name               | NULL
    assembly_qualified_type_name | NULL
    xml_collection_id            | NULL
    xml_collection_database      | NULL
    xml_collection_schema        | NULL
    xml_collection_name          | NULL
    is_xml_document              | 0
    is_case_sensitive            | 0
    is_fixed_length_clr_type     | 0
    source_server                | Homer
    source_database              | Music
    source_schema                | dbo
    source_table                 | Artists
    source_column                | ArtistName
    is_identity_column           | 0
    is_part_of_unique_key        | 0
    is_updateable                | 1
    is_computed_column           | 0
    is_sparse_column_set         | 0
    ordinal_in_order_by_list     | NULL
    order_by_is_descending       | NULL
    order_by_list_length         | NULL
    error_number                 | NULL
    error_severity               | NULL
    error_state                  | NULL
    error_message                | NULL
    error_type                   | NULL
    error_type_desc              | NULL
    -[ RECORD 2 ]-------------------------
    is_hidden                    | 1
    column_ordinal               | 2
    name                         | ArtistId
    is_nullable                  | 0
    system_type_id               | 56
    system_type_name             | int
    max_length                   | 4
    precision                    | 10
    scale                        | 0
    collation_name               | NULL
    user_type_id                 | NULL
    user_type_database           | NULL
    user_type_schema             | NULL
    user_type_name               | NULL
    assembly_qualified_type_name | NULL
    xml_collection_id            | NULL
    xml_collection_database      | NULL
    xml_collection_schema        | NULL
    xml_collection_name          | NULL
    is_xml_document              | 0
    is_case_sensitive            | 0
    is_fixed_length_clr_type     | 0
    source_server                | Homer
    source_database              | Music
    source_schema                | dbo
    source_table                 | Artists
    source_column                | ArtistId
    is_identity_column           | 0
    is_part_of_unique_key        | 1
    is_updateable                | 1
    is_computed_column           | 0
    is_sparse_column_set         | 0
    ordinal_in_order_by_list     | NULL
    order_by_is_descending       | NULL
    order_by_list_length         | NULL
    error_number                 | NULL
    error_severity               | NULL
    error_state                  | NULL
    error_message                | NULL
    error_type                   | NULL
    error_type_desc              | NULL


    1. SQLの別の列の各値の最も一般的な値を取得します

    2. OracleDBAのMySQLバックアップを実行および管理する方法

    3. jsonをキャッシュするための最良の方法

    4. ガレラクラスターリソース