Maison >base de données >tutoriel mysql >Comment puis-je récupérer le type de données précis d'une colonne SQL, y compris les paramètres et la nullité ?

Comment puis-je récupérer le type de données précis d'une colonne SQL, y compris les paramètres et la nullité ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-26 12:33:11689parcourir

How Can I Retrieve the Precise Data Type of a SQL Column Including Parameters and Nullability?

Obtenir le type de colonne avec SQL

Dans divers scénarios de base de données, comprendre le type de données d'une colonne spécifique dans une table est crucial. Heureusement, SQL propose une solution complète pour récupérer les types de colonnes via la vue INFORMATION_SCHEMA.COLUMNS. Cette vue fournit des métadonnées sur les tables de base de données et leurs colonnes, y compris les informations convoitées sur le type de données.

La colonne DATA_TYPE dans INFORMATION_SCHEMA.COLUMNS renvoie le type de données de base de la colonne. Cependant, pour certains types de données avec des options de paramétrage comme nvarchar ou datetime2, le type de base seul peut s'avérer insuffisant pour décrire complètement les caractéristiques de la colonne.

Pour résoudre ce problème, des colonnes supplémentaires dans la vue peuvent être consultées. Par exemple, CHARACTER_OCTET_LENGTH pour binaire et varbinary, CHARACTER_MAXIMUM_LENGTH pour char, nchar, varchar et nvarchar, DATETIME_PRECISION pour datetime2 et datetimeoffset, et NUMERIC_PRECISION et NUMERIC_SCALE pour les types de données décimaux et numériques fournissent les informations nécessaires pour reconstruire avec précision les valeurs des paramètres.

Par en référençant ces colonnes supplémentaires et en combinant leurs valeurs avec le type de données de base, vous pouvez obtenir une description précise du type de colonne. L'exemple de requête suivant illustre ce processus :

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;

Cette requête rassemble méticuleusement les informations complètes sur le type de données, y compris les valeurs des paramètres et l'état de nullité, dans la colonne FULL_DATA_TYPE. En exécutant cette requête, vous pouvez récupérer le type de données exact d'une colonne spécifique et mieux comprendre le schéma de votre base de données.

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