No SQL Server, há algumas maneiras de obter metadados do conjunto de resultados de uma consulta. Isso inclui o tipo de dados das colunas retornadas por uma consulta T-SQL.
Em particular, o
sys.dm_exec_describe_first_result_set
função de gerenciamento dinâmico do sistema é uma boa escolha para tal tarefa. Exemplo
Aqui está um exemplo para demonstrar como usar
sys.dm_exec_describe_first_result_set
para obter informações de tipo de dados sobre cada coluna retornada por uma determinada consulta 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);
Resultado:
+------------+------------------+--------------------+--------------+-------------+---------+ | 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 | +------------+------------------+--------------------+--------------+-------------+---------+
Nesse caso, três linhas são retornadas, cada uma representando uma coluna que seria retornada pela consulta que estou analisando.
Você deve ter notado que uma das colunas usa um alias de tipo de dados definido pelo usuário chamado clientcode . Ao criar um alias de tipo de dados definido pelo usuário, você o baseia em um tipo de sistema existente. Isso se reflete no resultado acima. Podemos ver que clientcode é baseado em varchar(8) .
O
sys.dm_exec_describe_first_result_set
A função retorna muitas colunas, portanto, sinta-se à vontade para incluir todas as colunas para ver se há outras que você possa achar úteis. Consulte também Como sys.dm_exec_describe_first_result_set
Funciona para uma explicação mais detalhada e mais exemplos. Você também pode usar o
sp_describe_first_result_set
procedimento armazenado do sistema para retornar as mesmas informações (ele usa o mesmo algoritmo que sys.dm_exec_describe_first_result_set
). Conjuntos de resultados de procedimentos armazenados
Se você deseja obter o tipo de dados das colunas retornadas por um procedimento armazenado, você pode usar o
sys.dm_exec_describe_first_result_set_for_object
função. Esta função usa o mesmo algoritmo que a anterior, mas a diferença é que esta aceita o ID de um procedimento armazenado ou gatilho como seu primeiro argumento (em vez do lote T-SQL real).
Portanto, podemos usá-lo assim:
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);
Resultado:
+---------+------------------+--------------------+--------------+-------------+---------+ | 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 | +---------+------------------+--------------------+--------------+-------------+---------+
Neste caso, usei o
OBJECT_ID()
função para retornar o ID do procedimento armazenado, o que me salvou de ter que saber o ID real. Consulte Como sys.dm_exec_describe_first_result_set_for_object funciona para obter mais informações e exemplos dessa função.