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

Cách trả về danh sách các kiểu dữ liệu trong SQL Server (T-SQL)

Nếu bạn cần lấy danh sách các kiểu dữ liệu trong SQL Server, bạn có thể sử dụng một trong các dạng xem hệ thống để thực hiện việc đó.

Đặc biệt, bạn có thể sử dụng sys.types xem danh mục hệ thống. Dạng xem này trả về tất cả các kiểu dữ liệu do hệ thống cung cấp và do người dùng xác định được xác định trong cơ sở dữ liệu. Nếu bạn đang sử dụng SQL Server 2000 sys.systypes nên thực hiện thủ thuật.

Ví dụ 1 - sys.types Xem

sys.types là chế độ xem tốt nhất để sử dụng nếu bạn đang sử dụng phiên bản SQL Server mới hơn SQL Server 2000.

Cách nhanh nhất / dễ nhất để sử dụng sys.types xem là để chọn mọi thứ. Trong trường hợp đó, mã của bạn có thể trông giống như sau:

SELECT * FROM sys.types;

Tuy nhiên, điều này trả về nhiều cột mà bạn có thể quan tâm hoặc có thể không quan tâm. Bạn có thể thu hẹp nó xuống chỉ những cột mà bạn quan tâm.

Dưới đây là một ví dụ về việc chọn một số cột quan tâm:

SELECT 
  name,
  max_length,
  [precision],
  scale,
  is_user_defined
FROM sys.types;

Kết quả:

+------------------+--------------+-------------+---------+-------------------+
| name             | max_length   | precision   | scale   | is_user_defined   |
|------------------+--------------+-------------+---------+-------------------|
| image            | 16           | 0           | 0       | 0                 |
| text             | 16           | 0           | 0       | 0                 |
| uniqueidentifier | 16           | 0           | 0       | 0                 |
| date             | 3            | 10          | 0       | 0                 |
| time             | 5            | 16          | 7       | 0                 |
| datetime2        | 8            | 27          | 7       | 0                 |
| datetimeoffset   | 10           | 34          | 7       | 0                 |
| tinyint          | 1            | 3           | 0       | 0                 |
| smallint         | 2            | 5           | 0       | 0                 |
| int              | 4            | 10          | 0       | 0                 |
| smalldatetime    | 4            | 16          | 0       | 0                 |
| real             | 4            | 24          | 0       | 0                 |
| money            | 8            | 19          | 4       | 0                 |
| datetime         | 8            | 23          | 3       | 0                 |
| float            | 8            | 53          | 0       | 0                 |
| sql_variant      | 8016         | 0           | 0       | 0                 |
| ntext            | 16           | 0           | 0       | 0                 |
| bit              | 1            | 1           | 0       | 0                 |
| decimal          | 17           | 38          | 38      | 0                 |
| numeric          | 17           | 38          | 38      | 0                 |
| smallmoney       | 4            | 10          | 4       | 0                 |
| bigint           | 8            | 19          | 0       | 0                 |
| hierarchyid      | 892          | 0           | 0       | 0                 |
| geometry         | -1           | 0           | 0       | 0                 |
| geography        | -1           | 0           | 0       | 0                 |
| varbinary        | 8000         | 0           | 0       | 0                 |
| varchar          | 8000         | 0           | 0       | 0                 |
| binary           | 8000         | 0           | 0       | 0                 |
| char             | 8000         | 0           | 0       | 0                 |
| timestamp        | 8            | 0           | 0       | 0                 |
| nvarchar         | 8000         | 0           | 0       | 0                 |
| nchar            | 8000         | 0           | 0       | 0                 |
| xml              | -1           | 0           | 0       | 0                 |
| sysname          | 256          | 0           | 0       | 0                 |
+------------------+--------------+-------------+---------+-------------------+

Đây là các kiểu dữ liệu trong cơ sở dữ liệu hiện tại. Nếu bạn chuyển sang một cơ sở dữ liệu khác, bạn có thể nhận được các kết quả khác nhau (điều này sẽ phụ thuộc phần lớn vào việc có bất kỳ kiểu dữ liệu nào do người dùng xác định hoặc kiểu dữ liệu bí danh đã được xác định hay không và chúng có khác nhau giữa các cơ sở dữ liệu hay không).

Ví dụ 2 - Bí danh &Loại dữ liệu do người dùng xác định

Trong ví dụ trước, tôi đã bao gồm is_user_defined cột. Chúng ta có thể thấy rằng không có kiểu dữ liệu nào là kiểu dữ liệu bí danh hoặc do người dùng định nghĩa, bởi vì tất cả chúng đều có 0 như giá trị của chúng.

Hãy tạo một kiểu dữ liệu bí danh và sau đó xem nó xuất hiện như thế nào trong kết quả.

Tạo kiểu dữ liệu bí danh:

CREATE TYPE SSN  
FROM varchar(11) NOT NULL;

Bây giờ chúng ta hãy chạy lại truy vấn.

SELECT 
  name,
  max_length,
  [precision],
  scale,
  is_user_defined
FROM sys.types;

Kết quả:

+------------------+--------------+-------------+---------+-------------------+
| name             | max_length   | precision   | scale   | is_user_defined   |
|------------------+--------------+-------------+---------+-------------------|
| image            | 16           | 0           | 0       | 0                 |
| text             | 16           | 0           | 0       | 0                 |
| uniqueidentifier | 16           | 0           | 0       | 0                 |
| date             | 3            | 10          | 0       | 0                 |
| time             | 5            | 16          | 7       | 0                 |
| datetime2        | 8            | 27          | 7       | 0                 |
| datetimeoffset   | 10           | 34          | 7       | 0                 |
| tinyint          | 1            | 3           | 0       | 0                 |
| smallint         | 2            | 5           | 0       | 0                 |
| int              | 4            | 10          | 0       | 0                 |
| smalldatetime    | 4            | 16          | 0       | 0                 |
| real             | 4            | 24          | 0       | 0                 |
| money            | 8            | 19          | 4       | 0                 |
| datetime         | 8            | 23          | 3       | 0                 |
| float            | 8            | 53          | 0       | 0                 |
| sql_variant      | 8016         | 0           | 0       | 0                 |
| ntext            | 16           | 0           | 0       | 0                 |
| bit              | 1            | 1           | 0       | 0                 |
| decimal          | 17           | 38          | 38      | 0                 |
| numeric          | 17           | 38          | 38      | 0                 |
| smallmoney       | 4            | 10          | 4       | 0                 |
| bigint           | 8            | 19          | 0       | 0                 |
| hierarchyid      | 892          | 0           | 0       | 0                 |
| geometry         | -1           | 0           | 0       | 0                 |
| geography        | -1           | 0           | 0       | 0                 |
| varbinary        | 8000         | 0           | 0       | 0                 |
| varchar          | 8000         | 0           | 0       | 0                 |
| binary           | 8000         | 0           | 0       | 0                 |
| char             | 8000         | 0           | 0       | 0                 |
| timestamp        | 8            | 0           | 0       | 0                 |
| nvarchar         | 8000         | 0           | 0       | 0                 |
| nchar            | 8000         | 0           | 0       | 0                 |
| xml              | -1           | 0           | 0       | 0                 |
| sysname          | 256          | 0           | 0       | 0                 |
| SSN              | 11           | 0           | 0       | 1                 |
+------------------+--------------+-------------+---------+-------------------+

Kiểu dữ liệu mới xuất hiện (ở dưới cùng). Nó cũng có giá trị là 1 trong is_user_defined cột.

sys.systypes Xem

Ngoài ra còn có một sys.systypes chế độ xem tương thích hệ thống, chỉ được cung cấp cho khả năng tương thích ngược. Điều này là do systypes là tên của một bảng hệ thống trong SQL Server 2000 và có thể có rất nhiều hệ thống kế thừa có mã tham chiếu đến bảng đó.

Microsoft đã chỉ ra rằng sys.systypes chế độ xem tương thích hệ thống sẽ bị xóa trong phiên bản tương lai của Microsoft SQL Server, và do đó, bạn nên tránh sử dụng chế độ xem này trong công việc mới.

Nói cách khác, sử dụng sys.types thay vào đó nếu bạn có thể.

Nhưng nếu bạn vẫn đang sử dụng phiên bản SQL Server cũ hơn, bạn sẽ cần sử dụng sys.systypes .

Lưu ý rằng sys.systypes chứa các cột / tên cột khác nhau thành sys.types , vì vậy các tên cột tôi đã sử dụng trong ví dụ trước sẽ không hoạt động.

Bạn vẫn có thể chọn tất cả các cột bằng dấu hoa thị (* ) ký tự đại diện mặc dù:

SELECT * FROM sys.systypes;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INSTR () Tương đương trong SQL Server

  2. SQL - Sự khác biệt giữa COALESCE và ISNULL?

  3. Ràng buộc bảng chéo MS SQL Server

  4. Chuyển một chuỗi được phân tách bằng dấu phẩy thành các hàng riêng lẻ

  5. SQL Server Internals:Các toán tử có vấn đề Pt. Tôi - Quét