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ó.