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

Użyj TYPE_NAME(), aby uzyskać nazwę typu danych w SQL Server

W SQL Server możesz użyć TYPE_NAME() funkcja zwracająca nazwę typu danych na podstawie jego identyfikatora. Może to być przydatne podczas wysyłania zapytań do widoku systemowego, takiego jak sys.columns który zwraca identyfikator typu, ale nie jego nazwę.

Możesz użyć TYPE_NAME() 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_NAME(34) AS Result;

Wynik:

+----------+
| Result   |
|----------|
| image    |
+----------+

Ten wynik mówi nam, że identyfikator typu 34 jest używany dla obrazu typ.

Przykład 2 – Bardziej użyteczny przykład

Oto bardziej przydatny przykład.

USE Music;
SELECT 
  o.name AS [Object Name], 
  c.name AS [Column Name],  
  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
WHERE o.type_desc = 'USER_TABLE';

Wynik:

+---------------+---------------+-------------+
| Object Name   | Column Name   | Type Name   |
|---------------+---------------+-------------|
| Artists       | ArtistId      | int         |
| Artists       | ArtistName    | nvarchar    |
| Artists       | ActiveFrom    | date        |
| Artists       | CountryId     | int         |
| Genres        | GenreId       | int         |
| Genres        | Genre         | nvarchar    |
| Albums        | AlbumId       | int         |
| Albums        | AlbumName     | nvarchar    |
| Albums        | ReleaseDate   | date        |
| Albums        | ArtistId      | int         |
| Albums        | GenreId       | int         |
| Country       | CountryId     | int         |
| Country       | CountryName   | nvarchar    |
+---------------+---------------+-------------+

To zapytanie zwraca tabele użytkowników wraz z ich kolumnami i typem danych dla każdej kolumny.

Oto jak to wygląda, jeśli usunę 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_id
WHERE o.type_desc = 'USER_TABLE';

Wynik:

+---------------+---------------+----------------+
| Object Name   | Column Name   | user_type_id   |
|---------------+---------------+----------------|
| Artists       | ArtistId      | 56             |
| Artists       | ArtistName    | 231            |
| Artists       | ActiveFrom    | 40             |
| Artists       | CountryId     | 56             |
| Genres        | GenreId       | 56             |
| Genres        | Genre         | 231            |
| Albums        | AlbumId       | 56             |
| Albums        | AlbumName     | 231            |
| Albums        | ReleaseDate   | 40             |
| Albums        | ArtistId      | 56             |
| Albums        | GenreId       | 56             |
| Country       | CountryId     | 56             |
| Country       | CountryName   | 231            |
+---------------+---------------+----------------+

Nie jest tak łatwo odczytać identyfikator typu.

Przykład 3 – Typy zdefiniowane przez użytkownika

Uwzględniono typy zdefiniowane przez użytkownika. Oto przykład, który zawiera alias typu zdefiniowanego przez użytkownika w wynikach.

USE Test;
SELECT 
  o.name AS [Object Name], 
  c.name AS [Column Name],  
  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 o.type_desc = 'USER_TABLE'
AND o.name = 'Client';

Wynik:

+---------------+---------------+-------------+-----------------+
| Object Name   | Column Name   | Type Name   | User Defined?   |
|---------------+---------------+-------------+-----------------|
| Client        | ClientCode    | clientcode  | Yes             |
| Client        | FirstName     | varchar     | No              |
| Client        | LastName      | varchar     | No              |
+---------------+---------------+-------------+-----------------+

Przykład 4 – Użycie TYPE_NAME() w klauzuli WHERE

Możesz użyć TYPE_NAME() (i dowolną inną funkcję systemową) w WHERE klauzula (i gdziekolwiek wyrażenie jest dozwolone).

Tutaj modyfikuję poprzedni przykład, aby użyć TYPE_NAME() w WHERE klauzula.

USE Test;
SELECT 
  o.name AS [Object Name], 
  c.name AS [Column Name],  
  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 TYPE_NAME(c.user_type_id) = 'clientcode';

Wynik:

+---------------+---------------+-------------+-----------------+
| Object Name   | Column Name   | Type Name   | User Defined?   |
|---------------+---------------+-------------+-----------------|
| Client        | ClientCode    | clientcode  | Yes             |
+---------------+---------------+-------------+-----------------+

Przykład 5 – Nieprawidłowy identyfikator typu lub niewystarczające uprawnienia

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

SELECT TYPE_NAME(258) AS Result;

Wynik:

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

Pobierz identyfikator typu

Jeśli znasz już nazwę typu danych, ale chcesz jego identyfikator, możesz użyć TYPE_ID() aby zwrócić identyfikator typu danych na podstawie jego nazwy.


  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 ustawić poniedziałek jako pierwszy dzień tygodnia w SQL Server

  2. 3 sposoby uzyskania etapów zadania zadania agenta serwera SQL (T-SQL)

  3. Jak wyświetlić sortowanie kolumny w SQL Server (T-SQL)

  4. Jak przeszukać bazę danych SQL Server w poszukiwaniu ciągu?

  5. Zliczaj wiersze na godzinę w SQL Server z pełną wartością daty i godziny jako wynikiem