Trong SQL Server, bạn có thể sử dụng TYPE_ID()
hàm để trả về ID của một kiểu dữ liệu, dựa trên tên của nó. Điều này có thể hữu ích khi truy vấn chế độ xem hệ thống lưu trữ ID của loại dữ liệu nhưng không lưu trữ tên của nó. Tên thường dễ nhớ hơn. Không dễ nhớ ID.
Bạn có thể sử dụng TYPE_ID()
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_ID('varchar') AS Result;
Kết quả:
+----------+ | Result | |----------| | 167 | +----------+
Kết quả này cho chúng tôi biết rằng varchar kiểu dữ liệu có ID là 167.
Ví dụ 2 - Ví dụ về Cơ sở dữ liệu
Đây là một ví dụ về việc sử dụng TYPE_ID()
trong một WHERE
mệnh đề để lọc kết quả chỉ thành một kiểu dữ liệu nhất định.
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');
Kết quả:
+---------------+---------------+-----------+-------------+ | 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 | +---------------+---------------+-----------+-------------+
Bạn sẽ nhận thấy rằng tôi cũng đang sử dụng TYPE_NAME()
trong ví dụ này để trả lại tên dựa trên ID của nó.
Ví dụ 3 - Các loại do người dùng xác định
Bạn cũng có thể sử dụng TYPE_ID()
cho các loại do người dùng xác định. 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ả.
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');
Kết quả:
+---------------+---------------+-----------+-------------+-----------------+ | 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 | +---------------+---------------+-----------+-------------+-----------------+
Ở đây, loại mã máy khách là bí danh loại do người dùng xác định và nó là is_user_defined
cờ là 1
. Trong trường hợp này, tôi sử dụng CASE
biểu thức trả về Yes
(và trả về No
nếu 0
của nó ).
Ví dụ 4 - Loại không hợp lệ hoặc không đủ quyền
Nếu bạn cung cấp tên 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_ID('oops') AS Result;
Kết quả:
+----------+ | Result | |----------| | NULL | +----------+