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

Use TYPE_NAME() para obter o nome de um tipo de dados no SQL Server


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 remover TYPE_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 usar TYPE_NAME() (e qualquer outra função do sistema) em um WHERE cláusula (e em qualquer lugar onde uma expressão é permitida).

Aqui, modifico o exemplo anterior para usar TYPE_NAME() no WHERE 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 usar TYPE_ID() para retornar o ID de um tipo de dados com base em seu nome.