Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzare TYPE_ID() per ottenere l'ID di un tipo di dati in SQL Server

In SQL Server puoi utilizzare TYPE_ID() funzione per restituire l'ID di un tipo di dati, in base al suo nome. Questo può essere utile quando si interroga una vista di sistema che memorizza l'ID di un tipo di dati ma non il suo nome. Di solito è più facile ricordare il nome. Non è così facile ricordare l'ID.

Puoi usare TYPE_ID() per i tipi di dati di sistema e i tipi di dati definiti dall'utente.

Esempio 1 – Utilizzo di base

Ecco un esempio di base per dimostrare come funziona.

SELECT TYPE_ID('varchar') AS Result;

Risultato:

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

Questo risultato ci dice che il varchar il tipo di dati ha un ID 167.

Esempio 2:un esempio di database

Ecco un esempio di utilizzo di TYPE_ID() in un WHERE clausola per filtrare i risultati solo in un determinato tipo di dati.

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

Risultato:

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

Noterai che sto usando anche TYPE_NAME() in questo esempio per restituire il nome in base al suo ID.

Esempio 3 – Tipi definiti dall'utente

Puoi anche usare TYPE_ID() per i tipi definiti dall'utente. Ecco un esempio che include un alias di tipo definito dall'utente nei risultati.

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

Risultato:

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

Qui il tipo di codice client è un alias di tipo definito dall'utente ed è is_user_defined il flag è 1 . In questo caso utilizzo un CASE espressione per restituire Yes (e per restituire No se è 0 ).

Esempio 4:tipo non valido o autorizzazione insufficiente

Se fornisci un nome di tipo non valido o non disponi di autorizzazioni sufficienti per fare riferimento al tipo, il risultato sarà NULL.

SELECT TYPE_ID('oops') AS Result;

Risultato:

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