Si vous avez besoin d'obtenir une liste de types de données dans SQL Server, vous pouvez utiliser l'une des vues système pour le faire.
En particulier, vous pouvez utiliser le sys.types
vue du catalogue système. Cette vue renvoie tous les types de données fournis par le système et définis par l'utilisateur définis dans la base de données. Si vous utilisez SQL Server 2000 sys.systypes
devrait faire l'affaire.
Exemple 1 – Le sys.types
Afficher
Les sys.types
view est la meilleure à utiliser si vous utilisez une version de SQL Server ultérieure à SQL Server 2000.
Le moyen le plus rapide/le plus simple d'utiliser les sys.types
vue consiste à tout sélectionner. Dans ce cas, votre code pourrait ressembler à ceci :
SELECT * FROM sys.types;
Cependant, cela renvoie un grand nombre de colonnes qui peuvent ou non vous intéresser. Vous pouvez le réduire aux seules colonnes qui vous intéressent.
Voici un exemple de sélection de certaines colonnes d'intérêt :
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Résultat :
+------------------+--------------+-------------+---------+-------------------+ | 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 | +------------------+--------------+-------------+---------+-------------------+
Ce sont les types de données dans la base de données actuelle. Si vous passez à une base de données différente, vous pourriez obtenir des résultats différents (cela dépendra en grande partie si des types de données définis par l'utilisateur ou des types de données d'alias ont été définis, et s'ils diffèrent ou non entre les bases de données).
Exemple 2 :Alias et types de données définis par l'utilisateur
Dans l'exemple précédent, j'ai inclus le is_user_defined
colonne. Nous pouvons voir qu'aucun des types de données n'est défini par l'utilisateur ou des types de données d'alias, car ils ont tous 0
comme valeur.
Créons un type de données alias, puis voyons comment il apparaît dans les résultats.
Créez le type de données d'alias :
CREATE TYPE SSN FROM varchar(11) NOT NULL;
Maintenant, réexécutons la requête.
SELECT name, max_length, [precision], scale, is_user_defined FROM sys.types;
Résultat :
+------------------+--------------+-------------+---------+-------------------+ | 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 | +------------------+--------------+-------------+---------+-------------------+
Le nouveau type de données apparaît (en bas). Il a également une valeur de 1
dans le is_user_defined
colonne.
Les sys.systypes
Afficher
Il y a aussi un sys.systypes
vue de compatibilité du système, qui n'est fournie que pour la compatibilité descendante. C'est parce que systypes
était le nom d'une table système dans SQL Server 2000, et il pourrait y avoir beaucoup de systèmes hérités avec du code qui fait référence à cette table.
Microsoft a indiqué que les sys.systypes
La vue de compatibilité du système sera supprimée dans une future version de Microsoft SQL Server et vous recommande donc d'éviter d'utiliser cette vue dans de nouveaux travaux.
En d'autres termes, utilisez sys.types
à la place si vous le pouvez.
Mais si vous utilisez toujours une version antérieure de SQL Server, vous devrez utiliser sys.systypes
.
Notez que sys.systypes
contient des noms de colonnes/colonnes différents de sys.types
, donc les noms de colonne que j'ai utilisés dans l'exemple précédent ne fonctionneront pas.
Vous pouvez toujours sélectionner toutes les colonnes à l'aide de l'astérisque (*
) caractère générique cependant :
SELECT * FROM sys.systypes;