Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Użyj TYPE_ID(), aby uzyskać identyfikator typu danych w SQL Server

W SQL Server możesz użyć TYPE_ID() funkcja zwracająca identyfikator typu danych na podstawie jego nazwy. Może to być przydatne podczas wysyłania zapytań do widoku systemowego, który przechowuje identyfikator typu danych, ale nie jego nazwę. Zwykle łatwiej jest zapamiętać nazwę. Nie tak łatwo zapamiętać identyfikator.

Możesz użyć TYPE_ID() dla typów danych systemowych i typów danych zdefiniowanych przez użytkownika.

Przykład 1 – Podstawowe użycie

Oto podstawowy przykład pokazujący, jak to działa.

SELECT TYPE_ID('varchar') AS Result;

Wynik:

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

Ten wynik mówi nam, że varchar typ danych ma identyfikator 167.

Przykład 2 – Przykład bazy danych

Oto przykład użycia TYPE_ID() w WHERE klauzula, aby filtrować wyniki tylko do określonego typu danych.

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

Wynik:

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

Zauważysz, że używam również TYPE_NAME() w tym przykładzie, aby zwrócić nazwę na podstawie jej identyfikatora.

Przykład 3 – Typy zdefiniowane przez użytkownika

Możesz także użyć TYPE_ID() dla typów zdefiniowanych przez użytkownika. Oto przykład, który zawiera alias typu zdefiniowanego przez użytkownika w wynikach.

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

Wynik:

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

Tutaj typ kodu klienta jest aliasem typu zdefiniowanym przez użytkownika i jest to is_user_defined flaga to 1 . W tym przypadku używam CASE wyrażenie do zwrócenia Yes (i do zwrócenia No jeśli jego 0 ).

Przykład 4 – Nieprawidłowy typ lub niewystarczające uprawnienia

Jeśli podasz nieprawidłową nazwę typu lub nie masz wystarczających uprawnień do odwoływania się do typu, wynik będzie NULL.

SELECT TYPE_ID('oops') AS Result;

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zainstalować SSMS

  2. Dlaczego warto korzystać z poziomu izolacji ODCZYTAJ NIEZAANGAŻOWANE?

  3. Użyj NEWSEQUENTIALID(), aby utworzyć przyrostowy identyfikator GUID w SQL Server

  4. Co oznacza exec sp_reset_connection w programie Sql Server Profiler?

  5. Kolejność instrukcji SQL Select bez klauzuli Order By