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