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