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)
Où 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 | +----------+------------------+--------------+-----------+-------------+---------+----------------+