No SQL Server, você pode usar o
TYPE_ID()
função para retornar o ID de um tipo de dados, com base em seu nome. Isso pode ser útil ao consultar uma exibição do sistema que armazena o ID de um tipo de dados, mas não seu nome. Geralmente é mais fácil lembrar o nome. Não é tão fácil lembrar o ID. Você pode usar
TYPE_ID()
para tipos de dados do sistema e tipos de dados definidos pelo usuário. Exemplo 1 – Uso básico
Aqui está um exemplo básico para demonstrar como funciona.
SELECT TYPE_ID('varchar') AS Result;
Resultado:
+----------+ | Result | |----------| | 167 | +----------+
Esse resultado nos diz que o varchar tipo de dados tem um ID de 167.
Exemplo 2 – Um exemplo de banco de dados
Aqui está um exemplo de uso de
TYPE_ID()
em um WHERE
cláusula para filtrar os resultados apenas para um determinado tipo de dados. 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 | +---------------+---------------+-----------+-------------+
Você notará que também estou usando
TYPE_NAME()
neste exemplo para retornar o nome com base em seu ID. Exemplo 3 – Tipos definidos pelo usuário
Você também pode usar
TYPE_ID()
para tipos definidos pelo usuário. Aqui está um exemplo que inclui um alias de tipo definido pelo usuário nos 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 | +---------------+---------------+-----------+-------------+-----------------+
Aqui, o tipo clientcode é um alias de tipo definido pelo usuário e é
is_user_defined
sinalizador é 1
. Neste caso eu uso um CASE
expressão para retornar Yes
(e para retornar No
se for 0
). Exemplo 4 - Tipo inválido ou permissão insuficiente
Se você fornecer um nome de tipo inválido ou não tiver permissão suficiente para fazer referência ao tipo, o resultado será NULL.
SELECT TYPE_ID('oops') AS Result;
Resultado:
+----------+ | Result | |----------| | NULL | +----------+