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

Comment renvoyer une liste de types de données dans SQL Server (T-SQL)

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;