Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

3 maneiras de obter o tipo de dados de uma coluna no SQL Server (T-SQL)


GUIs como SSMS ou Azure Data Studio facilitam a visualização do tipo de dados de uma coluna. Normalmente é uma simples questão de navegar até a coluna no explorador de objetos e você pode ver o tipo de dados ao lado da coluna.

Mas se você estiver usando T-SQL, precisará executar uma consulta.

O information_schema.columns Visualizar


O information_schema.columns view é uma boa opção se você deseja apenas o tipo de dados e nada mais:
SELECT 
    COLUMN_NAME, 
    DATA_TYPE, 
    CHARACTER_MAXIMUM_LENGTH AS MAX_LENGTH, 
    CHARACTER_OCTET_LENGTH AS OCTET_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Products' 
AND COLUMN_NAME = 'ProductName';

Resultado da amostra:
+---------------+-------------+--------------+----------------+
| COLUMN_NAME   | DATA_TYPE   | MAX_LENGTH   | OCTET_LENGTH   |
|---------------+-------------+--------------+----------------|
| ProductName   | varchar     | 255          | 255            |
+---------------+-------------+--------------+----------------+

Substituir Products e ProductName com o nome de sua tabela e coluna, respectivamente.

OK, eu retornei um pouco mais do que apenas o tipo de dados aqui. Mas você pode omitir as outras colunas, se necessário. Ou você pode adicionar mais. Por exemplo, existem colunas que contêm a precisão da coluna caso você esteja olhando para uma coluna numérica ou de data e hora.

Você pode retornar todas as colunas assim:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Products' 
AND COLUMN_NAME = 'ProductName';

As sys.columns Visualizar


O sys.columns vista é outra opção. Podemos juntar isso com o sys.tables view para obter uma coluna específica de uma tabela específica:
SELECT 
    c.name,
    type_name(c.system_type_id) AS system_type,
    type_name(c.user_type_id) AS user_type,
    c.max_length,
    c.precision,
    c.scale
FROM sys.tables t 
JOIN sys.columns c ON t.object_id = c.object_id
WHERE t.name = 'Products'
AND c.name = 'ProductName';

Resultado da amostra:
+-------------+---------------+-------------+--------------+-------------+---------+
| name        | system_type   | user_type   | max_length   | precision   | scale   |
|-------------+---------------+-------------+--------------+-------------+---------|
| ProductName | varchar       | varchar     | 255          | 0           | 0       |
+-------------+---------------+-------------+--------------+-------------+---------+

Novamente, inclua mais ou menos colunas conforme necessário.

Neste exemplo, usei o TYPE_NAME() função para retornar o nome do tipo de dados, com base em seu ID. Isso me salvou de ter que fazer uma junção no sys.types tabela.

O sp_help Procedimento armazenado


O sp_help procedimento armazenado pode ser útil se você quiser retornar mais informações sobre a tabela.

Este procedimento armazenado retorna informações sobre um objeto de banco de dados (qualquer objeto listado em sys.sysobjects visualização de compatibilidade), um tipo de dados definido pelo usuário ou um tipo de dados:
EXEC sp_help Products;

Isso retorna muita saída, então não vou listar tudo aqui.

Basta substituir Products com o nome da tabela ou outro objeto sobre o qual você deseja obter informações.

Obter o tipo de dados de uma coluna de uma consulta


Você também pode obter o tipo de dados das colunas retornadas por uma consulta.

Consulte descobrir o tipo de dados das colunas retornadas em um conjunto de resultados no SQL Server para obter mais informações e exemplos.