Maison > base de données > tutoriel mysql > Comment récupérer des types de données de colonnes complètes, y compris les paramètres et la nullité dans SQL ?

Comment récupérer des types de données de colonnes complètes, y compris les paramètres et la nullité dans SQL ?

Mary-Kate Olsen
Libérer: 2024-12-28 03:50:10
original
405 Les gens l'ont consulté

How to Retrieve Complete Column Data Types Including Parameters and Nullability in SQL?

Comment récupérer le type de colonne à l'aide de SQL

Dans les systèmes de gestion de bases de données relationnelles (SGBDR) modernes, l'obtention d'informations sur le type de colonne pour une table spécifique est une exigence courante. Pour répondre à ce besoin, la vue INFORMATION_SCHEMA.COLUMNS, largement prise en charge dans ISO SQL, fournit un mécanisme standardisé pour récupérer les métadonnées des colonnes, y compris leurs types de données.

La colonne DATA_TYPE dans la vue INFORMATION_SCHEMA.COLUMNS affiche le T de base. -Noms de types SQL/SQL Server, tels que nvarchar, datetime2 et décimal. Cependant, il exclut les arguments de paramètre pour les types paramétrés. Cette omission peut entraîner un comportement involontaire des colonnes.

Pour atténuer ce problème, il est essentiel d'exploiter des colonnes supplémentaires, telles que CHARACTER_OCTET_LENGTH (pour binaire), CHARACTER_MAXIMUM_LENGTH (pour char et nchar), DATETIME_PRECISION (pour datetime2 et datetimeoffset). , et NUMERIC_PRECISION et NUMERIC_SCALE (pour décimal et numérique). En combinant ces valeurs, vous pouvez reconstruire le type complet, y compris ses paramètres.

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;
Copier après la connexion

Cette requête produit des résultats qui incluent le type de données complet, y compris les informations sur les paramètres et la nullité, comme illustré ci-dessous :

[Image des résultats de la requête]

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal