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

sp_describe_first_result_setがSQLServerでどのように機能するか

    SQL Serverでは、sp_describe_first_result_set システムストアドプロシージャは、結果セットのメタデータを返します。

    具体的には、T-SQLバッチの最初の可能な結果セットのメタデータを返します。

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

    実例を示します。

    EXEC sp_describe_first_result_set 
        @tsql = N'SELECT * FROM Artists', 
        @params = null, 
        @browse_information_mode = 0;

    このコードは、このストアドプロシージャが受け入れる3つのパラメータのそれぞれに明示的に名前を付けています。

    最初のパラメーターのみが必要です。また、他のストアドプロシージャと同様に、必要に応じてパラメータ名を省略できます。

    したがって、次のコードを使用することもできます:

    EXEC sp_describe_first_result_set N'SELECT * FROM Artists';

    結果は次のとおりです。

    +-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------+
    | 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   | tds_type_id   | tds_length   | tds_collation_id   | tds_collation_sort_id   |
    |-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------|
    | 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                   | 56            | 4            | 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                   | 231           | 510          | 13632521           | 52                      |
    | 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                   | 40            | 3            | NULL               | NULL                    |
    +-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------+

    このストアドプロシージャで返される列は多数あるため(それぞれの説明については、Microsoftのドキュメントを参照してください)、すべてを表示するには、おそらく横にスクロールする必要があります。

    横スクロールで問題が発生した場合に備えて、次の例では垂直出力に切り替えます。

    ブラウズモード

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

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

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

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

    わかりやすくするために、T-SQLステートメントを変更して1つの列のみを返すようにします。また、横にスクロールする手間を省くために、垂直出力を使用して結果を表示します。

    @browse_information_mode = 0

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

    EXEC sp_describe_first_result_set 
        @tsql = N'SELECT AlbumName FROM vAlbums', 
        @params = null, 
        @browse_information_mode = 0;

    前述のように、必要に応じて、代わりにパラメーター名を省略できます。したがって、同じことを行うためのより簡潔な方法として、次のコードを使用できます。

    EXEC sp_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
    tds_type_id                  | 231
    tds_length                   | 510
    tds_collation_id             | 13632521
    tds_collation_sort_id        | 52

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

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

    @browse_information_mode = 1

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

    EXEC sp_describe_first_result_set 
        N'SELECT AlbumName FROM vAlbums', null, 1;

    @browse_information_modeを設定する 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   | tds_type_id   | tds_length   | tds_collation_id   | tds_collation_sort_id   |
    |-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------|
    | 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            | Music             | dbo             | Albums         | AlbumName       | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | 231           | 510          | 13632521           | 52                      |
    | 1           | 2                | ArtistId  | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | Music             | dbo             | Artists        | ArtistId        | 1                    | 1                       | 0               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | 56            | 4            | NULL               | NULL                    |
    | 1           | 3                | AlbumId   | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | Music             | dbo             | Albums         | AlbumId         | 1                    | 1                       | 0               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | 56            | 4            | NULL               | NULL                    |
    | 1           | 4                | GenreId   | 0             | 56               | int                | 4            | 10          | 0       | NULL                         | NULL           | NULL                 | NULL               | NULL             | NULL                           | NULL                | NULL                      | NULL                    | NULL                  | 0                 | 0                   | 0                          | NULL            | Music             | dbo             | Genres         | GenreId         | 1                    | 1                       | 0               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | 56            | 4            | NULL               | NULL                    |
    +-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------+

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

    垂直出力を使用して、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                | NULL
    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
    tds_type_id                  | 231
    tds_length                   | 510
    tds_collation_id             | 13632521
    tds_collation_sort_id        | 52

    source_databaseに注意してください 、source_schemasource_table 、およびsource_column 列はNULLではなくなりました 。ビューによってクエリされたベースオブジェクトに関する情報を提供します。

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

    source_serverにも注意してください 列はまだNULLです 。これは、ローカルサーバーが発信元サーバーであるためです。しかし、私のビューがリンクサーバー上のテーブルをクエリしている場合、そのサーバーの名前はsource_serverにあります。 列。

    例については、sys.dm_exec_describe_first_result_setのしくみを参照してください。その記事では、リンクサーバー上のデータベースにクエリを実行することを除いて、上記の例と同様のビューを使用します。

    @browse_information_mode = 2

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

    EXEC sp_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   | tds_type_id   | tds_length   | tds_collation_id   | tds_collation_sort_id   |
    |-------------+------------------+-----------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------|
    | 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            | Music             | dbo             | vAlbums        | AlbumName       | 0                    | 0                       | 1               | 0                    | 0                      | NULL                       | NULL                     | NULL                   | 231           | 510          | 13632521           | 52                      |
    | 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                   | 56            | 4            | 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              | Music
    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
    tds_type_id                  | 231
    tds_length                   | 510
    tds_collation_id             | 13632521
    tds_collation_sort_id        | 52

    この例では、source_table 列には、ベーステーブルではなく、実際のビュー名が含まれています。

    @params 引数

    これまでのところ、@paramsは使用していません。 NULLに設定する以外の引数 。

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

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

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

    EXEC sp_describe_first_result_set 
        @tsql = N'SELECT AlbumName FROM Albums WHERE ArtistId = @ArtistId', 
        @params = N'@ArtistId int',
        @browse_information_mode = 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
    tds_type_id                  | 231
    tds_length                   | 510
    tds_collation_id             | 13632521
    tds_collation_sort_id        | 52

    1. MySQLのスクリプトからデータベースを作成する方法

    2. MySQL COALESCE()の説明

    3. テーブル式の基礎、パート1

    4. フィールド値がNullの場合にOracleでテーブルを更新し、その更新が成功したかどうかを判断する