sql >> Database >  >> RDS >> Sqlserver

Hoe sp_describe_first_result_set werkt in SQL Server

In SQL Server is de sp_describe_first_result_set systeem opgeslagen procedure retourneert de metadata voor een resultatenset.

Meer specifiek retourneert het de metagegevens voor de eerste mogelijke resultaatset van een T-SQL-batch.

Het accepteert drie parameters, waarvan de eerste de T-SQL-instructie(s) is/zijn die u analyseert.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

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

Die code noemt expliciet elk van de drie parameters die deze opgeslagen procedure accepteert.

Alleen de eerste parameter is vereist. Ook kunt u, zoals bij elke opgeslagen procedure, de parameternamen weglaten als u dat wilt.

We zouden dus ook de volgende code kunnen gebruiken:

EXEC sp_describe_first_result_set N'SELECT * FROM Artists';

En hier is het 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   | 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                    |
+-------------+------------------+------------+---------------+------------------+--------------------+--------------+-------------+---------+------------------------------+----------------+----------------------+--------------------+------------------+--------------------------------+---------------------+---------------------------+-------------------------+-----------------------+-------------------+---------------------+----------------------------+-----------------+-------------------+-----------------+----------------+-----------------+----------------------+-------------------------+-----------------+----------------------+------------------------+----------------------------+--------------------------+------------------------+---------------+--------------+--------------------+-------------------------+

Er worden veel kolommen geretourneerd met deze opgeslagen procedure (zie de documenten van Microsoft voor een uitleg van elk), dus u zult waarschijnlijk zijwaarts moeten scrollen om ze allemaal te zien.

Ik zal in sommige van mijn volgende voorbeelden overschakelen naar verticale uitvoer, voor het geval je problemen hebt met zijwaarts scrollen.

Bladermodus

Het derde argument – ​​@browse_information_mode – specificeert of aanvullende sleutelkolommen en brontabelinformatie worden geretourneerd.

De volgende waarden worden geaccepteerd voor dit argument:

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.

Hieronder staan ​​voorbeelden die illustreren hoe elk van deze waarden het resultaat beïnvloedt.

Om de zaken beknopter te maken, zal ik mijn T-SQL-instructie wijzigen om slechts één kolom te retourneren. Ik zal de resultaten ook weergeven met behulp van verticale uitvoer, zodat u niet zijwaarts hoeft te scrollen.

@browse_information_mode = 0

In dit voorbeeld stel ik @browse_information_mode . in naar 0 .

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

Zoals eerder vermeld, kunt u desgewenst ook de parameternamen weglaten. Daarom zouden we de volgende code kunnen gebruiken als een beknoptere manier om hetzelfde te doen.

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

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

Merk op dat nogal wat kolommen NULL zijn . Merk in het bijzonder op dat de source_database , source_schema , source_table , en source_column kolommen zijn NULL .

Deze kolommen zijn niet NULL in de volgende twee voorbeelden, maar ze zullen twee verschillende resultaten opleveren.

@browse_information_mode = 1

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

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

@browse_information_mode instellen naar 1 geeft het resultaat alsof het een FOR BROWSE . bevat optie op de vraag.

In ons geval resulteert dit in het retourneren van vier rijen (die vier kolommen uit de basistabellen vertegenwoordigen).

Dit zijn de vier geretourneerde rijen:

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

Dus hoewel ik slechts één kolom heb gespecificeerd in de T-SQL-query die ik aan de procedure heb doorgegeven, retourneerde het informatie voor vier kolommen. Dit zijn de vier kolommen waarnaar wordt verwezen door de vAlbums bekijken.

Laten we inzoomen op slechts één kolom 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              | 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

Merk op dat de source_database , source_schema , source_table , en source_column kolommen zijn niet langer NULL . Ze geven informatie over de basisobjecten die door de weergave worden opgevraagd.

Wanneer we daarentegen @browse_information_mode . instellen tot 2 in het volgende voorbeeld krijgen we de werkelijke kolommen in de weergave.

Merk ook op dat de source_server kolom is nog steeds NULL . Dit komt omdat de lokale server de oorspronkelijke server is. Maar als mijn weergave tabellen op een gekoppelde server zou opvragen, zou de naam van die server in de source_server staan kolom.

Zie Hoe sys.dm_exec_describe_first_result_set werkt voor een voorbeeld. In dat artikel gebruik ik een vergelijkbare weergave als in het bovenstaande voorbeeld, behalve dat het een database op een gekoppelde server doorzoekt.

@browse_information_mode = 2

Laten we tot slot @browse_information_mode . instellen tot 2 .

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

In dit geval wordt de zoekopdracht geanalyseerd alsof deze zou worden gebruikt bij het voorbereiden of uitvoeren van een cursor.

Deze keer worden er slechts twee rijen geretourneerd:

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

En om te voorkomen dat u zijwaarts moet scrollen, is hier de eerste rij in 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              | 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

In dit voorbeeld is de source_table kolom bevat de werkelijke weergavenaam, in plaats van de basistabel.

De @params Argument

Tot nu toe hebben we de @params . niet gebruikt argument, behalve om het in te stellen op NULL .

Als de SQL-batch die u analyseert parameters bevat, gebruikt u de @params functie om die parameters te declareren.

Dit werkt vergelijkbaar met de manier waarop u parameters declareert bij het gebruik van de sp_executesql procedure.

Hier is een voorbeeld dat een parameter declareert met de @params argument.

EXEC sp_describe_first_result_set 
    @tsql = N'SELECT AlbumName FROM Albums WHERE ArtistId = @ArtistId', 
    @params = N'@ArtistId int',
    @browse_information_mode = 0;

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

  1. HAProxy:alle bronnen van de verschillende bronnen

  2. maak een aangepaste functie voor datumverschil met uitzondering van weekends en feestdagen in oracle sql

  3. MySQL db vraagtekens in plaats van Hebreeuwse karakters..?

  4. Geen enkele operator komt overeen met de opgegeven naam en argumenttype(s). Mogelijk moet u expliciete typecasts toevoegen. -- Netbeans, Postgresql 8.4 en Glassfish