Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Utiliser TYPEPROPERTY() pour renvoyer des informations sur un type de données dans SQL Server

Dans SQL Server, vous pouvez utiliser le TYPEPROPERTY() fonction pour renvoyer des informations sur un type de données.

Vous fournissez le nom du type de données, ainsi que la propriété que vous souhaitez renvoyer, et il renvoie des informations sur cette propriété pour le type de données donné.

Vous pouvez utiliser TYPEPROPERTY() pour les types de données système et les types de données définis par l'utilisateur.

Syntaxe

La syntaxe ressemble à ceci :

TYPEPROPERTY (type , property)

type est le type de données et la propriété est la propriété particulière sur laquelle vous souhaitez obtenir des informations.

Il y a 5 propriétés possibles :AllowsNull , Identifiant du propriétaire , Précision , Échelle , et UtiliseAnsiTrim .

Pour plus d'informations sur ces propriétés et leur fonctionnement avec cette fonction, consultez la documentation Microsoft.

Exemple 1 - Utilisation de base

Voici un exemple de base pour montrer comment cela fonctionne.

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

Résultat :

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

Ce résultat nous indique que le int le type de données a une précision de 10.

Exemple 2 – Toutes les propriétés

Voici un exemple qui renvoie toutes les propriétés pour le datetime2 type de données.

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

Résultat :

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

La raison UsesAnsiTrim est NULL parce que cette propriété ne s'applique qu'aux types de données binaires et de chaîne.

Pour démontrer, le voici à nouveau, sauf en utilisant un type de données chaîne :

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

Résultat :

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

Cette fois Scale est NUL. En effet, cette propriété ne s'applique qu'aux types numériques et à certains types de date.

Exemple 3 :Spécification de l'échelle ou de la précision

Certains types de données vous permettent de spécifier une échelle ou une précision, mais TYPEPROPERTY() n'acceptera pas ça :

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

Résultat :

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

Exemple 4 - Types de données définis par l'utilisateur

Le TYPEPROPERTY() fonctionne également sur les types de données définis par l'utilisateur.

Voici un exemple.

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

Résultat :

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

Exemple 5 - Inclure le préfixe de schéma de type de données

Vous pouvez également préfixer le type de données avec le nom du schéma.

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

Résultat :

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

Exemple 6 – Informations de retour pour tous les types de données dans la base de données

Voici un exemple qui renvoie des informations de propriété pour tous les types de données dans la base de données actuelle.

Pour cela, j'interroge le sys.types vue système. J'utilise aussi le SCHEMA_NAME() pour obtenir le nom du schéma en fonction de son ID.

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;

Résultat :

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

Bien que gardez à l'esprit que sys.types contient déjà la précision et l'échelle, vous pouvez également le faire :

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;

Résultat :

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