No SQL Server, você pode usar o
TYPE_NAME()
função para retornar o nome de um tipo de dados, com base em seu ID. Isso pode ser útil ao consultar uma visualização do sistema como sys.columns
que retorna o ID do tipo, mas não seu nome. Você pode usar
TYPE_NAME()
para tipos de dados do sistema e tipos de dados definidos pelo usuário. Exemplo 1 – Uso básico
Aqui está um exemplo básico para demonstrar como funciona.
SELECT TYPE_NAME(34) AS Resultado;
Resultado:
+----------+| Resultado ||----------|| imagem |+----------+
Esse resultado nos diz que o ID do tipo 34 é usado para a imagem tipo.
Exemplo 2 – Um exemplo mais útil
Aqui está um exemplo mais útil.
USE Music;SELECT o.name AS [Object Name], c.name AS [Column Name], TYPE_NAME(c.user_type_id) AS [Type Name] FROM sys.objects AS o JOIN sys.columns AS c ON o .object_id =c.object_idWHERE o.type_desc ='USER_TABLE';
Resultado:
+---------------+---------------+-------------+ | Nome do objeto | Nome da coluna | Nome do tipo ||---------------+---------------+-------------| | Artistas | ArtistId | int || Artistas | ArtistName | nvarchar || Artistas | AtivoDe | data || Artistas | PaísId | int || Gêneros | GêneroId | int || Gêneros | Gênero | nvarchar || Álbuns | AlbumId | int || Álbuns | Nome do álbum | nvarchar || Álbuns | Data de lançamento | data || Álbuns | ArtistId | int || Álbuns | GêneroId | int || País | PaísId | int || País | PaísName | nvarchar |+---------------+---------------+-------------+
Essa consulta retorna tabelas de usuários, juntamente com suas colunas e o tipo de dados de cada coluna.
Veja como fica se eu removerTYPE_NAME()
:
USE Music;SELECT o.name AS [Object Name], c.name AS [Column Name], c.user_type_id FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id =c.object_idWHERE o. type_desc ='USER_TABLE';
Resultado:
+---------------+---------------+-------------- --+| Nome do objeto | Nome da coluna | user_type_id ||---------------+---------------+--------------- -|| Artistas | ArtistId | 56 || Artistas | ArtistName | 231 || Artistas | AtivoDe | 40 || Artistas | PaísId | 56 || Gêneros | GêneroId | 56 || Gêneros | Gênero | 231 || Álbuns | AlbumId | 56 || Álbuns | Nome do álbum | 231 || Álbuns | Data de lançamento | 40 || Álbuns | ArtistId | 56 || Álbuns | GêneroId | 56 || País | PaísId | 56 || País | PaísName | 231 |+---------------+---------------+--------------- -+
Não é tão fácil ler o ID do tipo.
Exemplo 3 – Tipos definidos pelo usuário
Tipos definidos pelo usuário estão incluídos. Aqui está um exemplo que inclui um alias de tipo definido pelo usuário nos resultados.
USE Test;SELECT o.name AS [Object Name], c.name AS [Column Name], TYPE_NAME(c.user_type_id) AS [Type Name], CASE WHEN t.is_user_defined =1 THEN 'Yes' ELSE ' Não' END AS [Definido pelo usuário?]FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id =c.object_idJOIN sys.types t ON c.user_type_id =t.user_type_idWHERE o.type_desc ='USER_TABLE'AND o .name ='Cliente';
Resultado:
+---------------+---------------+-------------+ ------------------+| Nome do objeto | Nome da coluna | Nome do tipo | Usuário definido? ||---------------+---------------+-------------+-- ---------------|| Cliente | CódigoCliente | código do cliente | Sim || Cliente | Nome | varchar | Não || Cliente | Sobrenome | varchar | Não |+---------------+---------------+-------------+- ----------------+Exemplo 4 – Usando TYPE_NAME() em uma cláusula WHERE
Você pode usarTYPE_NAME()
(e qualquer outra função do sistema) em umWHERE
cláusula (e em qualquer lugar onde uma expressão é permitida).
Aqui, modifico o exemplo anterior para usarTYPE_NAME()
noWHERE
cláusula.
USE Test;SELECT o.name AS [Object Name], c.name AS [Column Name], TYPE_NAME(c.user_type_id) AS [Type Name], CASE WHEN t.is_user_defined =1 THEN 'Yes' ELSE ' Não' END AS [Definido pelo usuário?]FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id =c.object_idJOIN sys.types t ON c.user_type_id =t.user_type_idWHERE TYPE_NAME(c.user_type_id) ='clientcode ';
Resultado:
+---------------+---------------+-------------+ ------------------+| Nome do objeto | Nome da coluna | Nome do tipo | Usuário definido? ||---------------+---------------+-------------+-- ---------------|| Cliente | CódigoCliente | código do cliente | Sim |+---------------+---------------+-------------+- ----------------+Exemplo 5 - ID de tipo inválido ou permissão insuficiente
Se você fornecer um ID de tipo inválido ou não tiver permissão suficiente para fazer referência ao tipo, o resultado será NULL.
SELECT TYPE_NAME(258) AS Resultado;
Resultado:
+----------+| Resultado ||----------|| NULL |+----------+Obter o ID do tipo
Se você já sabe o nome do tipo de dados, mas quer seu ID, você pode usarTYPE_ID()
para retornar o ID de um tipo de dados com base em seu nome.