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