Maison >base de données >tutoriel mysql >Comment déterminer le type de données d'une colonne SQL à l'aide de INFORMATION_SCHEMA ?

Comment déterminer le type de données d'une colonne SQL à l'aide de INFORMATION_SCHEMA ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-27 16:44:11309parcourir

How to Determine a SQL Column's Data Type Using INFORMATION_SCHEMA?

Instruction SQL pour déterminer le type de données des colonnes

Dans le domaine de la gestion de bases de données, comprendre les types de données associés aux colonnes de table est crucial. SQL fournit une vue complète de la structure et des propriétés des tables. Cela inclut la possibilité de récupérer des informations sur les types de données de colonne à l'aide d'une instruction SQL spécifique.

INFORMATION_SCHEMA.COLUMNS

La vue INFORMATION_SCHEMA.COLUMNS sert d'outil puissant pour les requêtes. métadonnées sur les tables d'une base de données. Cette vue expose divers détails sur les colonnes, y compris leurs types de données. En utilisant la colonne DATA_TYPE, vous pouvez déterminer le type de données d'une colonne spécifique.

Considérations sur le paramétrage

Notez que la colonne DATA_TYPE dans INFORMATION_SCHEMA.COLUMNS peut ne pas toujours fournir toutes les informations nécessaires pour les types de données paramétrés. Par exemple, il n'inclut pas d'arguments pour les paramètres, ce qui peut entraîner des problèmes potentiels de comportement des colonnes.

Pour résoudre ce problème, il est recommandé de consulter des colonnes supplémentaires dans la vue INFORMATION_SCHEMA.COLUMNS, telles que :

  • CHARACTER_OCTET_LENGTH (pour binaire types)
  • CHARACTER_MAXIMUM_LENGTH (pour les types de caractères et de caractères nationaux)
  • DATETIME_PRECISION (pour les types datetime2 et datetimeoffset)
  • NUMERIC_PRECISION et NUMERIC_SCALE (pour les types décimaux et numériques)

Par en combinant ces colonnes, vous pouvez reconstruire le paramétrage complet du type de données.

Exemple de requête

La requête SQL suivante montre comment récupérer les informations complètes sur le type de données pour un colonne spécifiée à l'aide de la vue INFORMATION_SCHEMA.COLUMNS :

WITH q AS (
    SELECT
        c.TABLE_SCHEMA,
        c.TABLE_NAME,
        c.ORDINAL_POSITION,
        c.COLUMN_NAME,
        c.DATA_TYPE,
        CASE
            WHEN c.DATA_TYPE IN ( N'binary', N'varbinary' ) THEN ( CASE c.CHARACTER_OCTET_LENGTH WHEN -1 THEN N'(max)' ELSE CONCAT( N'(', c.CHARACTER_OCTET_LENGTH, N')' ) END )
            WHEN c.DATA_TYPE IN ( N'char', N'varchar', N'nchar', N'nvarchar' ) THEN ( CASE c.CHARACTER_MAXIMUM_LENGTH WHEN -1 THEN N'(max)' ELSE CONCAT( N'(', c.CHARACTER_MAXIMUM_LENGTH, N')' ) END )
            WHEN c.DATA_TYPE IN ( N'datetime2', N'datetimeoffset' ) THEN CONCAT( N'(', c.DATETIME_PRECISION, N')' )
            WHEN c.DATA_TYPE IN ( N'decimal', N'numeric' ) THEN CONCAT( N'(', c.NUMERIC_PRECISION, N',', c.NUMERIC_SCALE, N')' )
        END AS DATA_TYPE_PARAMETER,
        CASE c.IS_NULLABLE
            WHEN N'NO' THEN N' NOT NULL'
            WHEN N'YES' THEN N' NULL'
        END AS IS_NULLABLE2
    FROM
        INFORMATION_SCHEMA.COLUMNS AS c
)
SELECT
    q.TABLE_SCHEMA,
    q.TABLE_NAME,
    q.ORDINAL_POSITION,
    q.COLUMN_NAME,
    CONCAT( q.DATA_TYPE, ISNULL( q.DATA_TYPE_PARAMETER, N'' ), q.IS_NULLABLE2 ) AS FULL_DATA_TYPE

FROM
    q
WHERE
    q.TABLE_SCHEMA = 'yourSchemaName' AND
    q.TABLE_NAME = 'yourTableName' AND
    q.COLUMN_NAME = 'yourColumnName'

ORDER BY
    q.TABLE_SCHEMA,
    q.TABLE_NAME,
    q.ORDINAL_POSITION;

Exemple Sortie

L'exécution de la requête renverrait une description complète du type de données pour la colonne spécifiée, y compris ses paramètres et sa nullité. Voici un exemple de résultat :

TABLE_SCHEMA TABLE_NAME ORDINAL_POSITION COLUMN_NAME FULL_DATA_TYPE
yourSchemaName yourTableName 1 yourColumnName nvarchar(max) NOT NULL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn