V SQL Server můžete použít TYPE_NAME()
funkce, která vrátí název datového typu na základě jeho ID. To může být užitečné při dotazování na systémové zobrazení, jako je sys.columns
který vrací ID typu, ale ne jeho název.
Můžete použít TYPE_NAME()
pro systémové datové typy a uživatelem definované datové typy.
Příklad 1 – Základní použití
Zde je základní příklad, který demonstruje, jak to funguje.
SELECT TYPE_NAME(34) AS Result;
Výsledek:
+-----------+| Výsledek ||-----------|| obrázek |+----------+
Tento výsledek nám říká, že pro obrázek je použito ID typu 34 typ.
Příklad 2 – užitečnější příklad
Zde je užitečnější příklad.
USE Music;SELECT o.name AS [Název objektu], c.name AS [Název sloupce], 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_idWHERE o.type_desc ='USER_TABLE';
Výsledek:
+---------------+---------------+-------------+ | Název objektu | Název sloupce | Název typu ||---------------+---------------+-------------| | Umělci | ArtistId | int || Umělci | Jméno umělce | nvarchar || Umělci | AktivníOd | datum || Umělci | CountryId | int || Žánry | GenreId | int || Žánry | Žánr | nvarchar || Alba | AlbumId | int || Alba | Název alba | nvarchar || Alba | Datum vydání | datum || Alba | ArtistId | int || Alba | GenreId | int || Země | CountryId | int || Země | Země | nvarchar |+---------------+---------------+-------------+Tento dotaz vrací uživatelské tabulky spolu s jejich sloupci a datovým typem pro každý sloupec.
Takto to vypadá, když odeberu
TYPE_NAME()
:USE Music;SELECT o.name AS [Object Name], c.name AS [Column Name], c.user_type_id FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id =c.object_idWHERE o. type_desc ='USER_TABLE';Výsledek:
+---------------+---------------+-------------- --+| Název objektu | Název sloupce | user_type_id ||---------------+---------------+--------------- -|| Umělci | ArtistId | 56 || Umělci | Jméno umělce | 231 || Umělci | AktivníOd | 40 || Umělci | CountryId | 56 || Žánry | GenreId | 56 || Žánry | Žánr | 231 || Alba | AlbumId | 56 || Alba | Název alba | 231 || Alba | Datum vydání | 40 || Alba | ArtistId | 56 || Alba | GenreId | 56 || Země | CountryId | 56 || Země | Země | 231 |+---------------+---------------+--------------- -+Není tak snadné přečíst ID typu.
Příklad 3 – Uživatelsky definované typy
Uživatelem definované typy jsou zahrnuty. Zde je příklad, který ve výsledcích zahrnuje uživatelem definovaný alias typu.
USE Test;SELECT o.name AS [Název objektu], c.name AS [Název sloupce], TYPE_NAME(c.user_type_id) AS [Type Name], CASE WHEN t.is_user_defined =1 THEN 'Yes' ELSE ' Ne' KONEC JAKO [definováno uživatelem?]FROM sys.objects AS o PŘIPOJIT sys.columns AS c ON o.object_id =c.object_idJOIN sys.types t ON c.user_type_id =t.user_type_idWHERE o.type_desc ='USER_TABLE'AND o .name ='Klient';Výsledek:
+---------------+---------------+-------------+ ------------------+| Název objektu | Název sloupce | Typ Název | Definováno uživatelem? ||---------------+---------------+-------------+-- ----------------|| Klient | Kód klienta | klientský kód | Ano || Klient | Jméno | varchar | Ne || Klient | Příjmení | varchar | Ne |+---------------+---------------+-------------+- ----------------+Příklad 4 – Použití TYPE_NAME() v klauzuli WHERE
Můžete použít
TYPE_NAME()
(a jakékoli další systémové funkce) vWHERE
klauzule (a kdekoli je povolen výraz).Zde upravím předchozí příklad tak, že použiji
TYPE_NAME()
vWHERE
doložka.USE Test;SELECT o.name AS [Název objektu], c.name AS [Název sloupce], TYPE_NAME(c.user_type_id) AS [Type Name], CASE WHEN t.is_user_defined =1 THEN 'Yes' ELSE ' Ne' END AS [Definováno uživatelem?]FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id =c.object_idJOIN sys.types t ON c.user_type_id =t.user_type_idWHERE TYPE_NAME(c.user_type_id) =' ';Výsledek:
+---------------+---------------+-------------+ ------------------+| Název objektu | Název sloupce | Typ Název | Definováno uživatelem? ||---------------+---------------+-------------+-- ----------------|| Klient | Kód klienta | klientský kód | Ano |+---------------+---------------+-------------+- ----------------+Příklad 5 – Neplatné ID typu nebo nedostatečné oprávnění
Pokud zadáte neplatné ID typu nebo nemáte dostatečné oprávnění k odkazování na typ, bude výsledek NULL.
SELECT TYPE_NAME(258) AS Result;Výsledek:
+-----------+| Výsledek ||-----------|| NULL |+----------+Získejte ID typu
Pokud již znáte název datového typu, ale chcete jeho ID, můžete použít
TYPE_ID()
vrátit ID datového typu na základě jeho názvu.