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

3 façons d'obtenir le type de données d'une colonne dans SQL Server (T-SQL)

Les interfaces graphiques telles que SSMS ou Azure Data Studio permettent de voir facilement le type de données d'une colonne. Habituellement, il suffit de naviguer vers la colonne dans l'explorateur d'objets et vous pouvez voir le type de données juste à côté de la colonne.

Mais si vous utilisez T-SQL, vous devrez exécuter une requête.

Les information_schema.columns Afficher

Le information_schema.columns view est une bonne option si vous voulez simplement le type de données et rien de plus :

SELECT 
    COLUMN_NAME, 
    DATA_TYPE, 
    CHARACTER_MAXIMUM_LENGTH AS MAX_LENGTH, 
    CHARACTER_OCTET_LENGTH AS OCTET_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Products' 
AND COLUMN_NAME = 'ProductName';

Exemple de résultat :

+---------------+-------------+--------------+----------------+
| COLUMN_NAME   | DATA_TYPE   | MAX_LENGTH   | OCTET_LENGTH   |
|---------------+-------------+--------------+----------------|
| ProductName   | varchar     | 255          | 255            |
+---------------+-------------+--------------+----------------+

Remplacer Products et ProductName avec le nom de votre table et colonne respectivement.

OK, j'ai renvoyé un peu plus que le type de données ici. Mais vous pouvez omettre les autres colonnes si nécessaire. Ou vous pouvez en ajouter d'autres. Par exemple, certaines colonnes contiennent la précision de la colonne au cas où vous consulteriez une colonne numérique ou datetime.

Vous pouvez renvoyer toutes les colonnes comme ceci :

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Products' 
AND COLUMN_NAME = 'ProductName';

Les sys.columns Afficher

Les sys.columns la vue est une autre option. Nous pouvons joindre cela avec le sys.tables vue pour obtenir une colonne spécifique à partir d'une table spécifique :

SELECT 
    c.name,
    type_name(c.system_type_id) AS system_type,
    type_name(c.user_type_id) AS user_type,
    c.max_length,
    c.precision,
    c.scale
FROM sys.tables t 
JOIN sys.columns c ON t.object_id = c.object_id
WHERE t.name = 'Products'
AND c.name = 'ProductName';

Exemple de résultat :

+-------------+---------------+-------------+--------------+-------------+---------+
| name        | system_type   | user_type   | max_length   | precision   | scale   |
|-------------+---------------+-------------+--------------+-------------+---------|
| ProductName | varchar       | varchar     | 255          | 0           | 0       |
+-------------+---------------+-------------+--------------+-------------+---------+

Encore une fois, incluez plus ou moins de colonnes selon vos besoins.

Dans cet exemple, j'ai utilisé le TYPE_NAME() fonction pour renvoyer le nom du type de données, en fonction de son ID. Cela m'a évité d'avoir à faire une jointure sur le sys.types tableau.

Le sp_help Procédure stockée

Le sp_help procédure stockée peut être utile si vous souhaitez renvoyer plus d'informations sur la table.

Cette procédure stockée renvoie des informations sur un objet de base de données (tout objet répertorié dans le sys.sysobjects vue de compatibilité), un type de données défini par l'utilisateur ou un type de données :

EXEC sp_help Products;

Cela renvoie beaucoup de résultats, je ne vais donc pas tout énumérer ici.

Remplacez simplement Products avec le nom de la table ou de tout autre objet sur lequel vous souhaitez obtenir des informations.

Obtenir le type de données d'une colonne à partir d'une requête

Vous pouvez également obtenir le type de données des colonnes renvoyées par une requête.

Voir Trouver le type de données des colonnes renvoyées dans un jeu de résultats dans SQL Server pour plus d'informations et d'exemples.