Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използвайте TYPEPROPERTY() за връщане на информация за тип данни в SQL Server

В SQL Server можете да използвате TYPEPROPERTY() функция за връщане на информация за тип данни.

Вие предоставяте името на типа данни, както и свойството, което искате да бъде върнато, и то връща информация за това свойство за дадения тип данни.

Можете да използвате TYPEPROPERTY() за системни типове данни и потребителски дефинирани типове данни.

Синтаксис

Синтаксисът е така:

TYPEPROPERTY (type , property)

Където тип е типът данни и свойството е конкретната собственост, за която искате информация.

Има 5 възможни свойства:AllowsNull , OwnerId , Прецизност , Мащаб и UsesAnsiTrim .

За по-подробна информация относно тези свойства и как работят с тази функция, вижте документацията на Microsoft.

Пример 1 – Основна употреба

Ето основен пример, за да демонстрирате как работи.

SELECT TYPEPROPERTY('int', 'Precision') AS Result;

Резултат:

+----------+
| Result   |
|----------|
| 10       |
+----------+

Този резултат ни казва, че int типът данни има точност 10.

Пример 2 – Всички свойства

Ето пример, който връща всички свойства за datetime2 тип данни.

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];

Резултат:

+--------------+-----------+-------------+---------+----------------+
| AllowsNull   | OwnerId   | Precision   | Scale   | UsesAnsiTrim   |
|--------------+-----------+-------------+---------+----------------|
| 1            | 4         | 27          | 7       | NULL           |
+--------------+-----------+-------------+---------+----------------+

Причината UsesAnsiTrim е NULL е, защото това свойство е приложимо само за двоични и низови типове данни.

За да демонстрираме, ето го отново, с изключение на използването на низов тип данни:

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];

Резултат:

+--------------+-----------+-------------+---------+----------------+
| AllowsNull   | OwnerId   | Precision   | Scale   | UsesAnsiTrim   |
|--------------+-----------+-------------+---------+----------------|
| 1            | 4         | 8000        | NULL    | 1              |
+--------------+-----------+-------------+---------+----------------+

Този път Scale е NULL. Това е така, защото това свойство е приложимо само за числови и определени типове дати.

Пример 3 – Указване на мащаб или точност

Някои типове данни ви позволяват да зададете мащаб или точност, но TYPEPROPERTY() няма да приеме това:

SELECT 
  TYPEPROPERTY( 'datetime2(3)', 'Scale') AS [Datetime2 Scale],
  TYPEPROPERTY( 'datetime2(3)', 'Precision') AS [Datetime2 Precision],
  TYPEPROPERTY( 'varchar(255)', 'Precision') AS [Varchar Precision];

Резултат:

+-------------------+-----------------------+---------------------+
| Datetime2 Scale   | Datetime2 Precision   | Varchar Precision   |
|-------------------+-----------------------+---------------------|
| NULL              | NULL                  | NULL                |
+-------------------+-----------------------+---------------------+

Пример 4 – Дефинирани от потребителя типове данни

TYPEPROPERTY() функцията работи и върху дефинирани от потребителя типове данни.

Ето един пример.

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];

Резултат:

+--------------+-----------+-------------+---------+----------------+
| AllowsNull   | OwnerId   | Precision   | Scale   | UsesAnsiTrim   |
|--------------+-----------+-------------+---------+----------------|
| 0            | 1         | 8           | NULL    | 1              |
+--------------+-----------+-------------+---------+----------------+

Пример 5 – Включително префикса на схемата за тип данни

Можете също да поставите префикс на типа данни с името на схемата.

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];

Резултат:

+--------------+-----------+-------------+---------+----------------+
| AllowsNull   | OwnerId   | Precision   | Scale   | UsesAnsiTrim   |
|--------------+-----------+-------------+---------+----------------|
| 1            | 4         | 10          | 0       | NULL           |
+--------------+-----------+-------------+---------+----------------+

Пример 6 – Връщане на информация за всички типове данни в базата данни

Ето пример, който връща информация за свойствата за всички типове данни в текущата база данни.

За да направя това, отправям заявка към sys.types системен изглед. Използвам и SCHEMA_NAME() функция за получаване на името на схемата въз основа на нейния идентификатор.

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;

Резултат:

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

Въпреки че имайте предвид, че sys.types вече съдържа прецизност и мащаб, така че можете да направите и това:

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;

Резултат:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на съставен първичен ключ в SQL Server

  2. Конфигуриране на стартираща среда в SQL Server Management Studio (SSMS) - SQL Server / TSQL урок, част 7

  3. Кога да използвате Common Table Expression (CTE)

  4. Мога ли да имам външен ключ, препращащ колона в изглед в SQL Server?

  5. Как да ИЗБЕРЕТЕ *, но без имената на колони трябва да са уникални във всеки изглед