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

Sử dụng TYPE_ID () để lấy ID của một loại dữ liệu trong SQL Server

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiệu suất SQL:WHERE so với WHERE (ROW_NUMBER)

  2. SQL Server chuyển đổi varbinary thành chuỗi

  3. Sự kiện chờ SQL Server -3

  4. SQL Server:Mẹo hữu ích cho người mới

  5. Cách tăng tốc độ chèn hàng loạt vào MS SQL Server bằng pyodbc