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

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

    SQL Serverでは、sys.dm_exec_describe_first_result_set_for_object 動的管理関数は、特定のモジュールの最初の結果セットのメタデータを返します。

    @object_idが必要です パラメータとして、そのIDを持つモジュールの最初の結果メタデータを記述します。

    sp_describe_first_result_setと同じアルゴリズムを使用します システムストアドプロシージャとsys.dm_exec_describe_first_result_set 機能し、ストアドプロシージャとトリガーのみに制限されていることを除いて、ほとんど同じことを行います。

    別のオブジェクトタイプ(ビュー、関数、テーブルなど)のIDを渡すと、エラーが返されます。

    構文

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

    sys.dm_exec_describe_first_result_set_for_object   
        ( @object_id , @include_browse_information )

    ここで、@object_id はストアドプロシージャまたはトリガーのIDであり、@include_browse_information FOR BROWSEがあるかのようにブラウズモードを使用できます クエリのオプション。

    これがデモンストレーションの例です。

    この例では、OBJECT_ID()を使用します ストアドプロシージャのIDを返す関数(実際のIDを知る必要がなくなります)。

    SELECT * 
    FROM sys.dm_exec_describe_first_result_set_for_object(
        OBJECT_ID('spAlbumsFromArtist'),
        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                | 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            | NULL              | NULL            | NULL           | NULL            | 0                    | NULL                    | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
    | 0           | 2                | ReleaseDate | 0             | 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のドキュメントを参照してください。

    これが最初の行ですが、垂直出力を使用しています:

    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

    source_serverに注意してください 、source_databasesource_schemasource_table 、およびsource_column 列はNULLです 。 NULLにはなりません 次の2つの例で。

    ブラウズモード

    前の例では、0を使用しました 2番目の引数。これを0に設定できます 、1 、または2

    各値の意味は次のとおりです。

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

    0に設定するとどうなるかはすでに見てきました。 。したがって、次の2つの例では、1に設定します。 および2 それぞれ。

    Microsoftのドキュメントには、この引数はタイプビットであると記載されていることを指摘しておく必要があります。 、および2つの可能な値のみを参照します:0 および1 。ただし、SQLServer2017とSQLServer2019の両方でこの関数を確認しましたが、実際には tinyint

    これに加えて、sp_describe_first_result_setのドキュメント ストアドプロシージャは、この引数が tinyintであることを明示的に指定します 、および上記の3つの値を受け入れること。

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

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

    @include_browse_information = 1

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

    SELECT * 
    FROM sys.dm_exec_describe_first_result_set_for_object(
        OBJECT_ID('spAlbumsFromArtist'),
        1
    );

    結果:

    +-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+
    | 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              |
    | 0           | 2                | ReleaseDate | 0             | 40               | date               | 3            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Albums         | ReleaseDate     | 0                    | 0                       | 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                | 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              |
    +-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+

    今回は、基になるテーブルの4つの列を表す4つの行が返されます。

    前の例で行ったように、垂直出力を使用して最初の列をもう一度選びましょう。

    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 列はNULLではなくなりました 。

    この場合、これらの列は、ストアドプロシージャ内のクエリの基になるサーバー、データベース、スキーマ、テーブル、および列を反映しています。

    私が何を意味するかを示すために、実際のストアドプロシージャの定義は次のとおりです。

    CREATE PROCEDURE [dbo].[spAlbumsFromArtist] 
    	@ArtistName varchar(255)
    AS
    	SELECT AlbumName, ReleaseDate
    	FROM Homer.Music.dbo.Albums al
    		INNER JOIN Homer.Music.dbo.Artists ar
    		ON al.ArtistId = ar.ArtistId 
    	WHERE ar.ArtistName = @ArtistName;
    GO

    ストアドプロシージャは、4つの部分からなる名前付けを使用して、「Homer」と呼ばれるリンクサーバー、およびリモートサーバーのデータベース、スキーマ、テーブル、列を参照します。これは、sys.dm_exec_describe_first_result_set_for_objectによって返されるデータと一致します 機能。

    @include_browse_information = 2

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

    SELECT * 
    FROM sys.dm_exec_describe_first_result_set_for_object(
        OBJECT_ID('spAlbumsFromArtist'),
        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                          | Homer           | Music             | dbo             | Albums         | AlbumName       | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
    | 0           | 2                | ReleaseDate | 0             | 40               | date               | 3            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | Homer           | Music             | dbo             | Albums         | ReleaseDate     | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | NULL           | NULL             | NULL          | NULL            | NULL         | NULL              |
    | 1           | 3                | 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              |
    +-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+

    今回は、ROWSTATを含む3つの列を表す3つの行のみが返されます。 列。


    1. 間隔を分に変換する

    2. スノーフレークスキーマ

    3. SQLServerでの自然結合

    4. JSON_REPLACE()–MySQLのJSONドキュメントの値を置き換える