sql >> Databáze >  >> RDS >> Sqlserver

Použijte TYPE_ID() k získání ID datového typu na serveru SQL Server

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

  1. Hodnoty oddělené čárkou na funkci IN v oracle

  2. MySQL:Co je reverzní verze LIKE?

  3. Smazat pomocí Join v MySQL

  4. Jak porovnat data v polích datetime v Postgresql?