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;