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.