Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Utilisez TYPE_NAME() pour obtenir le nom d'un type de données dans SQL Server

Dans SQL Server, vous pouvez utiliser le TYPE_NAME() fonction pour renvoyer le nom d'un type de données, en fonction de son ID. Cela peut être utile lors de l'interrogation d'une vue système telle que sys.columns qui renvoie l'ID du type mais pas son nom.

Vous pouvez utiliser TYPE_NAME() pour les types de données système et les types de données définis par l'utilisateur.

Exemple 1 - Utilisation de base

Voici un exemple de base pour montrer comment cela fonctionne.

SELECT TYPE_NAME(34) AS Result ;

Résultat :

+----------+| Résultat ||----------|| image |+----------+

Ce résultat nous indique que l'ID de type 34 est utilisé pour l'image saisir.

Exemple 2 - Un exemple plus utile

Voici un exemple plus utile.

USE Music;SELECT o.name AS [Nom de l'objet], c.name AS [Nom de la colonne], TYPE_NAME(c.user_type_id) AS [Nom du type] FROM sys.objects AS o JOIN sys.columns AS c ON o .object_id =c.object_idWHERE o.type_desc ='USER_TABLE';

Résultat :

+---------------+---------------+----------------------+ | Nom d'objet | Nom de colonne | Nom du type ||---------------+---------------+-------------| | Artistes | Identifiant de l'artiste | entier || Artistes | NomArtiste | nvarchar || Artistes | ActiveDepuis | rendez-vous || Artistes | ID pays | entier || Genres | ID de genre | entier || Genres | genre | nvarchar || Albums | ID d'album | entier || Albums | NomAlbum | nvarchar || Albums | Date de sortie | rendez-vous || Albums | Identifiant de l'artiste | entier || Albums | ID de genre | entier || Pays | ID pays | entier || Pays | NomPays | nvarchar |+---------------+---------------+-------------+ 

Cette requête renvoie les tables utilisateur, ainsi que leurs colonnes et le type de données pour chaque colonne.

Voici à quoi cela ressemble si je supprime TYPE_NAME() :

USE Music;SELECT o.name AS [Nom de l'objet], c.name AS [Nom de la colonne], 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';

Résultat :

+---------------+---------------+---------------------- --+| Nom d'objet | Nom de colonne | id_type_utilisateur ||---------------+---------------+--------------- -|| Artistes | Identifiant de l'artiste | 56 || Artistes | NomArtiste | 231 || Artistes | ActiveDepuis | 40 || Artistes | ID pays | 56 || Genres | ID de genre | 56 || Genres | genre | 231 || Albums | ID d'album | 56 || Albums | NomAlbum | 231 || Albums | Date de sortie | 40 || Albums | Identifiant de l'artiste | 56 || Albums | ID de genre | 56 || Pays | ID pays | 56 || Pays | NomPays | 231 |+---------------+---------------+--------------- -+

Il n'est pas aussi facile de lire l'ID de type.

Exemple 3 - Types définis par l'utilisateur

Les types définis par l'utilisateur sont inclus. Voici un exemple qui inclut un alias de type défini par l'utilisateur dans les résultats.

USE Test;SELECT o.name AS [Nom de l'objet], c.name AS [Nom de la colonne], TYPE_NAME(c.user_type_id) AS [Nom du type], CASE WHEN t.is_user_defined =1 THEN 'Yes' ELSE ' No' END AS [User Defined?]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 ='Client';

Résultat :

+---------------+---------------+----------------------+ -----------------+| Nom d'objet | Nom de colonne | Saisissez le nom | Défini par l'utilisateur? ||---------------+---------------+-------------+-- ---------------|| Client | CodeClient | code client | Oui || Client | Prénom | varchar | Non || Client | Nom | varchar | Non |+---------------+---------------+-------------+- ----------------+

Exemple 4 – Utilisation de TYPE_NAME() dans une clause WHERE

Vous pouvez utiliser TYPE_NAME() (et toute autre fonction système) dans un WHERE clause (et partout où une expression est autorisée).

Ici, je modifie l'exemple précédent pour que j'utilise TYPE_NAME() dans le WHERE clause.

USE Test;SELECT o.name AS [Nom de l'objet], c.name AS [Nom de la colonne], TYPE_NAME(c.user_type_id) AS [Nom du type], CASE WHEN t.is_user_defined =1 THEN 'Yes' ELSE ' Non' END AS [User Defined?]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) ='code client ';

Résultat :

+---------------+---------------+-------------+ -----------------+| Nom d'objet | Nom de colonne | Saisissez le nom | Défini par l'utilisateur? ||---------------+---------------+-------------+-- ---------------|| Client | CodeClient | code client | Oui |+---------------+---------------+-------------+- ----------------+

Exemple 5 :ID de type non valide ou autorisation insuffisante

Si vous fournissez un ID de type non valide ou si vous ne disposez pas des autorisations suffisantes pour référencer le type, le résultat sera NULL.

SELECT TYPE_NAME(258) AS Result ;

Résultat :

+----------+| Résultat ||----------|| NULL |+----------+

Obtenir l'identifiant du type

Si vous connaissez déjà le nom du type de données, mais que vous voulez son ID, vous pouvez utiliser TYPE_ID() pour renvoyer l'ID d'un type de données en fonction de son nom.