Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sử dụng TYPE_NAME () để lấy tên của loại dữ liệu trong SQL Server

Trong SQL Server, bạn có thể sử dụng TYPE_NAME() hàm để trả về tên của một kiểu dữ liệu, dựa trên ID của nó. Điều này có thể hữu ích khi truy vấn chế độ xem hệ thống, chẳng hạn như sys.columns trả về ID của loại nhưng không trả về tên của nó.

Bạn có thể sử dụng TYPE_NAME() cho các kiểu dữ liệu hệ thống và kiểu dữ liệu do người dùng xác định.

Ví dụ 1 - Cách sử dụng cơ bản

Dưới đây là một ví dụ cơ bản để chứng minh cách hoạt động của nó.

SELECT TYPE_NAME(34) AS Result;

Kết quả:

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

Kết quả này cho chúng tôi biết rằng loại ID là 34 được sử dụng cho hình ảnh loại.

Ví dụ 2 - Một Ví dụ Hữu ích hơn

Đây là một ví dụ hữu ích hơn.

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

Kết quả:

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

Truy vấn này trả về các bảng của người dùng, cùng với các cột của họ và kiểu dữ liệu cho mỗi cột.

Đây là giao diện nếu tôi xóa 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';

Kết quả:

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

Không dễ đọc ID loại.

Ví dụ 3 - Các loại do người dùng xác định

Các loại do người dùng xác định được bao gồm. Dưới đây là một ví dụ bao gồm bí danh loại do người dùng xác định trong kết quả.

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

Kết quả:

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

Ví dụ 4 - Sử dụng TYPE_NAME () trong Mệnh đề WHERE

Bạn có thể sử dụng TYPE_NAME() (và bất kỳ chức năng hệ thống nào khác) trong WHERE mệnh đề (và bất kỳ nơi nào cho phép một biểu thức).

Ở đây, tôi sửa đổi ví dụ trước đó để tôi sử dụng TYPE_NAME() trong WHERE mệnh đề.

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

Kết quả:

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

Ví dụ 5 - ID loại không hợp lệ hoặc không đủ quyền

Nếu bạn cung cấp ID loại không hợp lệ hoặc bạn không có đủ quyền để tham chiếu loại, kết quả sẽ là KHÔNG.

SELECT TYPE_NAME(258) AS Result;

Kết quả:

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

Lấy ID loại

Nếu bạn đã biết tên của loại dữ liệu nhưng bạn muốn có ID của nó, bạn có thể sử dụng TYPE_ID() để trả về ID của một kiểu dữ liệu dựa trên tên của nó.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo RAND () Xác định trong SQL Server

  2. Truy vấn chặn máy chủ SQL

  3. LEN () so với DATALENGTH () trong SQL Server

  4. Sử dụng Excel VBA để chạy truy vấn SQL

  5. Sử dụng FILEGROUP_ID () để trả về ID của nhóm tệp trong SQL Server