Dans SQL Server, vous pouvez utiliser le TYPE_ID()
fonction pour renvoyer l'ID d'un type de données, en fonction de son nom. Cela peut être utile lors de l'interrogation d'une vue système qui stocke l'ID d'un type de données mais pas son nom. Il est généralement plus facile de retenir le nom. Pas si facile de retenir l'ID.
Vous pouvez utiliser TYPE_ID()
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_ID('varchar') AS Result;
Résultat :
+----------+ | Result | |----------| | 167 | +----------+
Ce résultat nous indique que le varchar le type de données a un ID de 167.
Exemple 2 - Un exemple de base de données
Voici un exemple d'utilisation de TYPE_ID()
dans un WHERE
clause pour filtrer les résultats sur un type de données donné.
SELECT o.name AS [Object Name], c.name AS [Column Name], c.user_type_id AS [Type ID], 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_id JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE c.user_type_id = TYPE_ID('varchar');
Résultat :
+---------------+---------------+-----------+-------------+ | Object Name | Column Name | Type ID | Type Name | |---------------+---------------+-----------+-------------| | Individual | FirstName | 167 | varchar | | Individual | LastName | 167 | varchar | | Occupation | JobTitle | 167 | varchar | | Event | EventName | 167 | varchar | | Scoreboard | Player | 167 | varchar | | Team | TeamName | 167 | varchar | | Client | FirstName | 167 | varchar | | Client | LastName | 167 | varchar | | Colors | ColorName | 167 | varchar | +---------------+---------------+-----------+-------------+
Vous remarquerez que j'utilise également TYPE_NAME()
dans cet exemple pour renvoyer le nom en fonction de son ID.
Exemple 3 - Types définis par l'utilisateur
Vous pouvez également utiliser TYPE_ID()
pour les types définis par l'utilisateur. Voici un exemple qui inclut un alias de type défini par l'utilisateur dans les résultats.
SELECT o.name AS [Object Name], c.name AS [Column Name], c.user_type_id AS [Type ID], TYPE_NAME(c.user_type_id) AS [Type Name], 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_id JOIN sys.types t ON c.user_type_id = t.user_type_id WHERE c.user_type_id = TYPE_ID('varchar') OR c.user_type_id = TYPE_ID('clientcode');
Résultat :
+---------------+---------------+-----------+-------------+-----------------+ | Object Name | Column Name | Type ID | Type Name | User Defined? | |---------------+---------------+-----------+-------------+-----------------| | Individual | FirstName | 167 | varchar | No | | Individual | LastName | 167 | varchar | No | | Occupation | JobTitle | 167 | varchar | No | | Event | EventName | 167 | varchar | No | | Scoreboard | Player | 167 | varchar | No | | Team | TeamName | 167 | varchar | No | | Client | ClientCode | 257 | clientcode | Yes | | Client | FirstName | 167 | varchar | No | | Client | LastName | 167 | varchar | No | | Colors | ColorName | 167 | varchar | No | +---------------+---------------+-----------+-------------+-----------------+
Ici, le type de code client est un alias de type défini par l'utilisateur, et c'est is_user_defined
le drapeau est 1
. Dans ce cas, j'utilise un CASE
expression pour retourner Yes
(et pour retourner No
si c'est 0
).
Exemple 4 :Type non valide ou autorisation insuffisante
Si vous fournissez un nom 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_ID('oops') AS Result;
Résultat :
+----------+ | Result | |----------| | NULL | +----------+