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

Scopri il tipo di dati delle colonne restituite in un set di risultati in SQL Server

In SQL Server esistono alcuni modi per ottenere i metadati del set di risultati da una query. Ciò include il tipo di dati delle colonne restituite da una query T-SQL.

In particolare, il sys.dm_exec_describe_first_result_set la funzione di gestione dinamica del sistema è una buona scelta per tale attività.

Esempio

Ecco un esempio per dimostrare come utilizzare sys.dm_exec_describe_first_result_set per ottenere informazioni sul tipo di dati su ciascuna colonna restituita da una determinata query T-SQL.

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);

Risultato:

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

In questo caso vengono restituite tre righe, ognuna delle quali rappresenta una colonna che verrebbe restituita dalla query che sto analizzando.

Potresti aver notato che una delle colonne utilizza un alias del tipo di dati definito dall'utente chiamato codice cliente . Quando si crea un alias del tipo di dati definito dall'utente, lo si basa su un tipo di sistema esistente. Ciò si riflette nel risultato di cui sopra. Possiamo vedere quel codice cliente si basa su varchar(8) .

Il sys.dm_exec_describe_first_result_set la funzione restituisce molte colonne, quindi sentiti libero di includere tutte le colonne per vedere se ce ne sono altre che potresti trovare utili. Vedi anche Come sys.dm_exec_describe_first_result_set Funziona per una spiegazione più dettagliata e più esempi.

Puoi anche usare il sp_describe_first_result_set stored procedure di sistema per restituire le stesse informazioni (usa lo stesso algoritmo di sys.dm_exec_describe_first_result_set ).

Set di risultati stored procedure

Se vuoi ottenere il tipo di dati delle colonne restituite da una procedura memorizzata, puoi utilizzare il sys.dm_exec_describe_first_result_set_for_object funzione.

Questa funzione utilizza lo stesso algoritmo della precedente, ma la differenza è che questa accetta l'ID di una procedura memorizzata o di un trigger come primo argomento (invece del batch T-SQL effettivo).

Pertanto, possiamo usarlo in questo modo:

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);

Risultato:

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

In questo caso, ho usato OBJECT_ID() funzione per restituire l'ID della procedura memorizzata, che mi ha evitato di dover conoscere l'ID effettivo.

Vedi come funziona sys.dm_exec_describe_first_result_set_for_object per ulteriori informazioni ed esempi per questa funzione.