sql >> Database teknologi >  >> RDS >> Sqlserver

Find ud af datatypen for de kolonner, der returneres i et resultatsæt i SQL Server

I SQL Server er der et par måder at få metadata af resultatsættet fra en forespørgsel på. Dette inkluderer datatypen for de kolonner, der returneres af en T-SQL-forespørgsel.

Især sys.dm_exec_describe_first_result_set system dynamisk styringsfunktion er et godt valg til sådan en opgave.

Eksempel

Her er et eksempel til at demonstrere, hvordan du bruger sys.dm_exec_describe_first_result_set for at få datatypeoplysninger om hver kolonne, der returneres af en given T-SQL-forespørgsel.

SELECT 
    name,
    user_type_name,
    system_type_name,
    max_length,
    [precision],
    scale
FROM sys.dm_exec_describe_first_result_set(
    'select * from Clients', 
    null, 
    0);

Resultat:

+------------+------------------+--------------------+--------------+-------------+---------+
| name       | user_type_name   | system_type_name   | max_length   | precision   | scale   |
|------------+------------------+--------------------+--------------+-------------+---------|
| ClientCode | clientcode       | varchar(8)         | 8            | 0           | 0       |
| FirstName  | NULL             | varchar(60)        | 60           | 0           | 0       |
| LastName   | NULL             | varchar(60)        | 60           | 0           | 0       |
+------------+------------------+--------------------+--------------+-------------+---------+

I dette tilfælde returneres tre rækker, som hver repræsenterer en kolonne, der ville blive returneret af den forespørgsel, som jeg analyserer.

Du har måske bemærket, at en af ​​kolonnerne bruger et brugerdefineret datatypealias kaldet klientkode . Når du opretter et brugerdefineret datatypealias, baserer du det på en eksisterende systemtype. Dette afspejles i ovenstående resultat. Vi kan se den klientkode er baseret på varchar(8) .

sys.dm_exec_describe_first_result_set funktionen returnerer mange kolonner, så du er velkommen til at inkludere alle kolonner for at se, om der er andre, du kan finde nyttige. Se også Hvordan sys.dm_exec_describe_first_result_set Virker for en mere detaljeret forklaring og flere eksempler.

Du kan også bruge sp_describe_first_result_set systemlagret procedure for at returnere den samme information (den bruger den samme algoritme som sys.dm_exec_describe_first_result_set ).

Gemte procedureresultatsæt

Hvis du ønsker at få datatypen for kolonnerne returneret af en lagret procedure, kan du bruge sys.dm_exec_describe_first_result_set_for_object funktion.

Denne funktion bruger den samme algoritme som den forrige, men forskellen er, at denne accepterer ID'et for en lagret procedure eller trigger som dets første argument (i stedet for den faktiske T-SQL batch).

Derfor kan vi bruge det sådan her:

SELECT 
    name,
    user_type_name,
    system_type_name,
    max_length,
    [precision],
    scale
FROM sys.dm_exec_describe_first_result_set_for_object(
    OBJECT_ID('sp_BadDogs'),
    0);

Resultat:

+---------+------------------+--------------------+--------------+-------------+---------+
| name    | user_type_name   | system_type_name   | max_length   | precision   | scale   |
|---------+------------------+--------------------+--------------+-------------+---------|
| DogId   | NULL             | int                | 4            | 10          | 0       |
| DogName | NULL             | nvarchar(255)      | 510          | 0           | 0       |
| GoodDog | NULL             | bit                | 1            | 1           | 0       |
+---------+------------------+--------------------+--------------+-------------+---------+

I dette tilfælde brugte jeg OBJECT_ID() funktion til at returnere ID'et for den lagrede procedure, hvilket reddede mig fra at skulle kende det faktiske ID.

Se Hvordan sys.dm_exec_describe_first_result_set_for_object virker for mere information og eksempler på denne funktion.


  1. Hvordan viser jeg fejl for min MySQLi-forespørgsel?

  2. postgresql udenlandsk nøgle syntaks

  3. Sådan udskiftes en del af en streng i SQL

  4. Sådan forbinder du GraphQL og PostgreSQL