V SQL Server můžete použít TYPE_ID()
funkce vrátit ID datového typu na základě jeho názvu. To může být užitečné při dotazování na systémový pohled, který ukládá ID datového typu, ale ne jeho název. Obvykle je snazší si jméno zapamatovat. Není tak snadné si ID zapamatovat.
Můžete použít TYPE_ID()
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_ID('varchar') AS Result;
Výsledek:
+----------+ | Result | |----------| | 167 | +----------+
Tento výsledek nám říká, že varchar datový typ má ID 167.
Příklad 2 – Příklad databáze
Zde je příklad použití TYPE_ID()
v WHERE
klauzule k filtrování výsledků pouze na daný typ dat.
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');
Výsledek:
+---------------+---------------+-----------+-------------+ | 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 | +---------------+---------------+-----------+-------------+
Všimněte si, že také používám TYPE_NAME()
v tomto příkladu vrátí název na základě jeho ID.
Příklad 3 – Uživatelsky definované typy
Můžete také použít TYPE_ID()
pro uživatelem definované typy. Zde je příklad, který ve výsledcích zahrnuje uživatelem definovaný alias typu.
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');
Výsledek:
+---------------+---------------+-----------+-------------+-----------------+ | 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 | +---------------+---------------+-----------+-------------+-----------------+
Zde je typem clientcode uživatelsky definovaný alias typu a je is_user_defined
příznak je 1
. V tomto případě používám CASE
výraz vrátí Yes
(a vrátíte No
pokud je jeho 0
).
Příklad 4 – Neplatný typ nebo nedostatečné oprávnění
Pokud zadáte neplatný název typu nebo nemáte dostatečná oprávnění k odkazování na typ, výsledek bude NULL.
SELECT TYPE_ID('oops') AS Result;
Výsledek:
+----------+ | Result | |----------| | NULL | +----------+