Trong SQL Server, bạn có thể sử dụng TYPEPROPERTY()
chức năng trả về thông tin về một kiểu dữ liệu.
Bạn cung cấp tên của kiểu dữ liệu cũng như thuộc tính bạn muốn trả về và nó trả về thông tin về thuộc tính đó cho kiểu dữ liệu đã cho.
Bạn có thể sử dụng TYPEPROPERTY()
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.
Cú pháp
Cú pháp như sau:
TYPEPROPERTY (type , property)
Ở đâu loại là kiểu dữ liệu và thuộc tính là thuộc tính cụ thể mà bạn muốn biết thông tin.
Có 5 thuộc tính có thể có: AllowsNull , OwnerId , Độ chính xác , Quy mô và ApplicationsAnsiTrim .
Để biết thêm thông tin chi tiết về các thuộc tính này và cách chúng hoạt động với chức năng này, hãy xem tài liệu của Microsoft.
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 TYPEPROPERTY('int', 'Precision') AS Result;
Kết quả:
+----------+ | Result | |----------| | 10 | +----------+
Kết quả này cho chúng ta biết rằng int kiểu dữ liệu có độ chính xác là 10.
Ví dụ 2 - Tất cả các thuộc tính
Dưới đây là một ví dụ trả về tất cả các thuộc tính cho datetime2 kiểu dữ liệu.
SELECT TYPEPROPERTY( 'datetime2', 'AllowsNull') AS [AllowsNull], TYPEPROPERTY( 'datetime2', 'OwnerId') AS [OwnerId], TYPEPROPERTY( 'datetime2', 'Precision') AS [Precision], TYPEPROPERTY( 'datetime2', 'Scale') AS [Scale], TYPEPROPERTY( 'datetime2', 'UsesAnsiTrim') AS [UsesAnsiTrim];
Kết quả:
+--------------+-----------+-------------+---------+----------------+ | AllowsNull | OwnerId | Precision | Scale | UsesAnsiTrim | |--------------+-----------+-------------+---------+----------------| | 1 | 4 | 27 | 7 | NULL | +--------------+-----------+-------------+---------+----------------+
Lý do UsesAnsiTrim
là NULL là do thuộc tính đó chỉ áp dụng cho các kiểu dữ liệu nhị phân và chuỗi.
Để chứng minh, đây là một lần nữa, ngoại trừ việc sử dụng kiểu dữ liệu chuỗi:
SELECT TYPEPROPERTY( 'varchar', 'AllowsNull') AS [AllowsNull], TYPEPROPERTY( 'varchar', 'OwnerId') AS [OwnerId], TYPEPROPERTY( 'varchar', 'Precision') AS [Precision], TYPEPROPERTY( 'varchar', 'Scale') AS [Scale], TYPEPROPERTY( 'varchar', 'UsesAnsiTrim') AS [UsesAnsiTrim];
Kết quả:
+--------------+-----------+-------------+---------+----------------+ | AllowsNull | OwnerId | Precision | Scale | UsesAnsiTrim | |--------------+-----------+-------------+---------+----------------| | 1 | 4 | 8000 | NULL | 1 | +--------------+-----------+-------------+---------+----------------+
Lần này Scale
là NULL. Đó là bởi vì thuộc tính này chỉ áp dụng cho các loại ngày tháng và số nhất định.
Ví dụ 3 - Chỉ định tỷ lệ hoặc độ chính xác
Một số kiểu dữ liệu cho phép bạn chỉ định tỷ lệ hoặc độ chính xác, nhưng TYPEPROPERTY()
sẽ không chấp nhận điều đó:
SELECT TYPEPROPERTY( 'datetime2(3)', 'Scale') AS [Datetime2 Scale], TYPEPROPERTY( 'datetime2(3)', 'Precision') AS [Datetime2 Precision], TYPEPROPERTY( 'varchar(255)', 'Precision') AS [Varchar Precision];
Kết quả:
+-------------------+-----------------------+---------------------+ | Datetime2 Scale | Datetime2 Precision | Varchar Precision | |-------------------+-----------------------+---------------------| | NULL | NULL | NULL | +-------------------+-----------------------+---------------------+
Ví dụ 4 - Loại dữ liệu do người dùng xác định
TYPEPROPERTY()
chức năng cũng hoạt động trên các kiểu dữ liệu do người dùng xác định.
Đây là một ví dụ.
SELECT TYPEPROPERTY( 'clientcode', 'AllowsNull') AS [AllowsNull], TYPEPROPERTY( 'clientcode', 'OwnerId') AS [OwnerId], TYPEPROPERTY( 'clientcode', 'Precision') AS [Precision], TYPEPROPERTY( 'clientcode', 'Scale') AS [Scale], TYPEPROPERTY( 'clientcode', 'UsesAnsiTrim') AS [UsesAnsiTrim];
Kết quả:
+--------------+-----------+-------------+---------+----------------+ | AllowsNull | OwnerId | Precision | Scale | UsesAnsiTrim | |--------------+-----------+-------------+---------+----------------| | 0 | 1 | 8 | NULL | 1 | +--------------+-----------+-------------+---------+----------------+
Ví dụ 5 - Bao gồm Tiền tố lược đồ kiểu dữ liệu
Bạn cũng có thể đặt tiền tố cho kiểu dữ liệu bằng tên lược đồ.
SELECT TYPEPROPERTY( 'sys.int', 'AllowsNull') AS [AllowsNull], TYPEPROPERTY( 'sys.int', 'OwnerId') AS [OwnerId], TYPEPROPERTY( 'sys.int', 'Precision') AS [Precision], TYPEPROPERTY( 'sys.int', 'Scale') AS [Scale], TYPEPROPERTY( 'sys.int', 'UsesAnsiTrim') AS [UsesAnsiTrim];
Kết quả:
+--------------+-----------+-------------+---------+----------------+ | AllowsNull | OwnerId | Precision | Scale | UsesAnsiTrim | |--------------+-----------+-------------+---------+----------------| | 1 | 4 | 10 | 0 | NULL | +--------------+-----------+-------------+---------+----------------+
Ví dụ 6 - Thông tin trả về cho tất cả các loại dữ liệu trong cơ sở dữ liệu
Dưới đây là một ví dụ trả về thông tin thuộc tính cho tất cả các loại dữ liệu trong cơ sở dữ liệu hiện tại.
Để thực hiện việc này, tôi truy vấn sys.types
chế độ xem hệ thống. Tôi cũng sử dụng SCHEMA_NAME()
để lấy tên của lược đồ dựa trên ID của nó.
SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Data Type], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'AllowsNull') AS [AllowsNull], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'OwnerId') AS [OwnerId], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'Precision') AS [Precision], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'Scale') AS [Scale], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'UsesAnsiTrim') AS [UsesAnsiTrim] FROM sys.types ORDER BY name;
Kết quả:
+----------+------------------+--------------+-----------+-------------+---------+----------------+ | Schema | Data Type | AllowsNull | OwnerId | Precision | Scale | UsesAnsiTrim | |----------+------------------+--------------+-----------+-------------+---------+----------------| | sys | bigint | 1 | 4 | 19 | 0 | NULL | | sys | binary | 1 | 4 | 8000 | NULL | 1 | | sys | bit | 1 | 4 | 1 | NULL | NULL | | sys | char | 1 | 4 | 8000 | NULL | 1 | | dbo | clientcode | 0 | 1 | 8 | NULL | 1 | | sys | date | 1 | 4 | 10 | 0 | NULL | | sys | datetime | 1 | 4 | 23 | 3 | NULL | | sys | datetime2 | 1 | 4 | 27 | 7 | NULL | | sys | datetimeoffset | 1 | 4 | 34 | 7 | NULL | | sys | decimal | 1 | 4 | 38 | 38 | NULL | | sys | float | 1 | 4 | 53 | NULL | NULL | | sys | geography | 1 | 4 | -1 | NULL | NULL | | sys | geometry | 1 | 4 | -1 | NULL | NULL | | sys | hierarchyid | 1 | 4 | 892 | NULL | NULL | | sys | image | 1 | 4 | 2147483647 | NULL | NULL | | sys | int | 1 | 4 | 10 | 0 | NULL | | sys | money | 1 | 4 | 19 | 4 | NULL | | sys | nchar | 1 | 4 | 4000 | NULL | NULL | | sys | ntext | 1 | 4 | 1073741823 | NULL | NULL | | sys | numeric | 1 | 4 | 38 | 38 | NULL | | sys | nvarchar | 1 | 4 | 4000 | NULL | NULL | | sys | real | 1 | 4 | 24 | NULL | NULL | | sys | smalldatetime | 1 | 4 | 16 | 0 | NULL | | sys | smallint | 1 | 4 | 5 | 0 | NULL | | sys | smallmoney | 1 | 4 | 10 | 4 | NULL | | sys | sql_variant | 1 | 4 | 0 | NULL | 1 | | sys | sysname | 0 | 4 | 128 | NULL | NULL | | sys | text | 1 | 4 | 2147483647 | NULL | NULL | | sys | time | 1 | 4 | 16 | 7 | NULL | | sys | timestamp | 0 | 4 | 8 | NULL | NULL | | sys | tinyint | 1 | 4 | 3 | 0 | NULL | | sys | uniqueidentifier | 1 | 4 | 16 | NULL | NULL | | sys | varbinary | 1 | 4 | 8000 | NULL | 1 | | sys | varchar | 1 | 4 | 8000 | NULL | 1 | | sys | xml | 1 | 4 | -1 | NULL | NULL | +----------+------------------+--------------+-----------+-------------+---------+----------------+
Mặc dù hãy nhớ rằng sys.types đã chứa độ chính xác và tỷ lệ, vì vậy bạn cũng có thể làm điều này:
SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Data Type], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'AllowsNull') AS [AllowsNull], TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'OwnerId') AS [OwnerId], Precision, Scale, TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'UsesAnsiTrim') AS [UsesAnsiTrim] FROM sys.types ORDER BY name;
Kết quả:
+----------+------------------+--------------+-----------+-------------+---------+----------------+ | Schema | Data Type | AllowsNull | OwnerId | Precision | Scale | UsesAnsiTrim | |----------+------------------+--------------+-----------+-------------+---------+----------------| | sys | bigint | 1 | 4 | 19 | 0 | NULL | | sys | binary | 1 | 4 | 0 | 0 | 1 | | sys | bit | 1 | 4 | 1 | 0 | NULL | | sys | char | 1 | 4 | 0 | 0 | 1 | | dbo | clientcode | 0 | 1 | 0 | 0 | 1 | | sys | date | 1 | 4 | 10 | 0 | NULL | | sys | datetime | 1 | 4 | 23 | 3 | NULL | | sys | datetime2 | 1 | 4 | 27 | 7 | NULL | | sys | datetimeoffset | 1 | 4 | 34 | 7 | NULL | | sys | decimal | 1 | 4 | 38 | 38 | NULL | | sys | float | 1 | 4 | 53 | 0 | NULL | | sys | geography | 1 | 4 | 0 | 0 | NULL | | sys | geometry | 1 | 4 | 0 | 0 | NULL | | sys | hierarchyid | 1 | 4 | 0 | 0 | NULL | | sys | image | 1 | 4 | 0 | 0 | NULL | | sys | int | 1 | 4 | 10 | 0 | NULL | | sys | money | 1 | 4 | 19 | 4 | NULL | | sys | nchar | 1 | 4 | 0 | 0 | NULL | | sys | ntext | 1 | 4 | 0 | 0 | NULL | | sys | numeric | 1 | 4 | 38 | 38 | NULL | | sys | nvarchar | 1 | 4 | 0 | 0 | NULL | | sys | real | 1 | 4 | 24 | 0 | NULL | | sys | smalldatetime | 1 | 4 | 16 | 0 | NULL | | sys | smallint | 1 | 4 | 5 | 0 | NULL | | sys | smallmoney | 1 | 4 | 10 | 4 | NULL | | sys | sql_variant | 1 | 4 | 0 | 0 | 1 | | sys | sysname | 0 | 4 | 0 | 0 | NULL | | sys | text | 1 | 4 | 0 | 0 | NULL | | sys | time | 1 | 4 | 16 | 7 | NULL | | sys | timestamp | 0 | 4 | 0 | 0 | NULL | | sys | tinyint | 1 | 4 | 3 | 0 | NULL | | sys | uniqueidentifier | 1 | 4 | 0 | 0 | NULL | | sys | varbinary | 1 | 4 | 0 | 0 | 1 | | sys | varchar | 1 | 4 | 0 | 0 | 1 | | sys | xml | 1 | 4 | 0 | 0 | NULL | +----------+------------------+--------------+-----------+-------------+---------+----------------+