sql >> Database >  >> RDS >> Sqlserver

Hoe sys.dm_exec_describe_first_result_set_for_object werkt in SQL Server

In SQL Server, de sys.dm_exec_describe_first_result_set_for_object dynamische beheerfunctie retourneert de metadata van de eerste resultatenset voor een bepaalde module.

Er is een @object_id . voor nodig als een parameter en beschrijft de eerste resultaatmetadata voor de module met die ID.

Het gebruikt hetzelfde algoritme als de sp_describe_first_result_set systeem opgeslagen procedure en de sys.dm_exec_describe_first_result_set functie, en doet vrijwel hetzelfde, behalve dat het beperkt is tot alleen opgeslagen procedures en triggers.

Als u de ID van een ander objecttype doorgeeft (zoals een weergave, functie, tabel, enz.), wordt er een fout geretourneerd.

Syntaxis

De syntaxis gaat als volgt:

sys.dm_exec_describe_first_result_set_for_object   
    ( @object_id , @include_browse_information )

Waar @object_id is de ID van de opgeslagen procedure of trigger, en @include_browse_information stelt u in staat om de bladermodus te gebruiken alsof er een FOR BROWSE . is optie op de zoekopdracht.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

In dit voorbeeld gebruik ik de OBJECT_ID() functie om de ID van de opgeslagen procedure terug te geven (waardoor ik de werkelijke ID niet hoef te weten).

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

Resultaat:

+-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+
| 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              |
+-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+

Deze functie retourneert veel kolommen. Zie de documentatie van Microsoft voor een volledig overzicht van elke kolom.

Hier is weer de eerste rij, maar met verticale uitvoer:

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

Houd er rekening mee dat de source_server , source_database , source_schema , source_table , en source_column kolommen zijn NULL . Ze zijn niet NULL in de volgende twee voorbeelden.

Bladermodus

In het vorige voorbeeld gebruikte ik 0 voor het tweede argument. U kunt dit instellen op 0 , 1 , of 2 .

Dit is wat elke waarde betekent:

Waarde Resultaat
0 Er wordt geen informatie geretourneerd.
1 Elke zoekopdracht wordt geanalyseerd alsof deze een FOR BROWSE . bevat optie op de vraag. Dit zal de namen van de basistabel retourneren als de bronkolominformatie.
2 Elke query wordt geanalyseerd alsof deze zou worden gebruikt bij het voorbereiden of uitvoeren van een cursor. Hiermee worden weergavenamen geretourneerd als bronkolominformatie.

We hebben al gezien wat er gebeurt als het is ingesteld op 0 . Dus in de volgende twee voorbeelden stel ik het in op 1 en 2 respectievelijk.

Ik moet erop wijzen dat in de Microsoft-documentatie staat dat dit argument van het type bit . is , en verwijst slechts naar twee mogelijke waarden:0 en 1 . Ik heb deze functie echter gecontroleerd in zowel SQL Server 2017 als SQL Server 2019, en het is eigenlijk een tinyint .

Verder is de documentatie voor de sp_describe_first_result_set opgeslagen procedure specificeert expliciet dat dit argument tinyint . is , en dat het de drie bovengenoemde waarden accepteert.

Ook de documentatie voor sys.dm_exec_describe_first_result_set_for_object stelt dat het hetzelfde algoritme gebruikt als sp_describe_first_result_set .

In ieder geval bevatten de voorbeelden in dit artikel alle drie de waarden.

@include_browse_information = 1

In dit voorbeeld stel ik @include_browse_information . in naar 1 .

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

Resultaat:

+-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+
| 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              |
+-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+

Deze keer worden vier rijen geretourneerd, die vier kolommen vertegenwoordigen uit de onderliggende tabellen.

Laten we de eerste kolom opnieuw selecteren met verticale uitvoer, zoals we deden in het vorige voorbeeld:

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

Deze keer de source_server , source_database , source_schema , source_table , en source_column kolommen zijn niet langer NULL .

In dit geval weerspiegelen die kolommen de onderliggende server, database, schema, tabel en kolom van de query binnen de opgeslagen procedure.

Om te demonstreren wat ik bedoel, hier is de daadwerkelijke opgeslagen proceduredefinitie:

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

De opgeslagen procedure gebruikt vierdelige naamgeving om te verwijzen naar een gekoppelde server genaamd "Homer", evenals de database, het schema, tabellen en kolommen van de externe server. Dit komt overeen met de gegevens die zijn geretourneerd door de sys.dm_exec_describe_first_result_set_for_object functie.

@include_browse_information = 2

In dit voorbeeld stel ik @include_browse_information . in tot 2 .

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

Resultaat:

+-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+
| 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              |
+-------------+------------------+-------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+----------------+------------------+---------------+-----------------+--------------+-------------------+

Deze keer worden er slechts drie rijen geretourneerd, die drie kolommen vertegenwoordigen, waaronder een ROWSTAT kolom.


  1. MySQL LIMIT-clausule equivalent voor SQL SERVER

  2. COVID-19-paraatheid bij ScaleGrid

  3. Uitgebreide evenementen voor SSAS

  4. Is er een manier om een ​​vervaltijd in te stellen, waarna een gegevensinvoer automatisch wordt verwijderd in PostgreSQL?