Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Use TYPE_ID() para obter a ID de um tipo de dados no SQL Server


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