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

Utilisez TYPE_ID() pour obtenir l'ID d'un type de données dans SQL Server

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     |
+----------+