sql >> Base de Datos >  >> RDS >> Sqlserver

Use TYPE_ID() para obtener la ID de un tipo de datos en SQL Server

En SQL Server, puede usar TYPE_ID() función para devolver el ID de un tipo de datos, en función de su nombre. Esto puede ser útil cuando se consulta una vista del sistema que almacena el ID de un tipo de datos pero no su nombre. Por lo general, es más fácil recordar el nombre. No es tan fácil recordar la identificación.

Puedes usar TYPE_ID() para tipos de datos del sistema y tipos de datos definidos por el usuario.

Ejemplo 1:uso básico

Aquí hay un ejemplo básico para demostrar cómo funciona.

SELECT TYPE_ID('varchar') AS Result;

Resultado:

+----------+
| Result   |
|----------|
| 167      |
+----------+

Este resultado nos dice que el varchar el tipo de datos tiene un ID de 167.

Ejemplo 2:un ejemplo de base de datos

Aquí hay un ejemplo del uso de TYPE_ID() en un WHERE cláusula para filtrar los resultados a solo un tipo de datos dado.

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');

Resultado:

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

Notarás que también estoy usando TYPE_NAME() en este ejemplo para devolver el nombre basado en su ID.

Ejemplo 3:tipos definidos por el usuario

También puede usar TYPE_ID() para tipos definidos por el usuario. Este es un ejemplo que incluye un alias de tipo definido por el usuario en los resultados.

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');

Resultado:

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

Aquí, el tipo de código de cliente es un alias de tipo definido por el usuario, y es is_user_defined la bandera es 1 . En este caso uso un CASE expresión para devolver Yes (y para devolver No si es 0 ).

Ejemplo 4:tipo no válido o permiso insuficiente

Si proporciona un nombre de tipo no válido o no tiene suficientes permisos para hacer referencia al tipo, el resultado será NULL.

SELECT TYPE_ID('oops') AS Result;

Resultado:

+----------+
| Result   |
|----------|
| NULL     |
+----------+