Maison > base de données > tutoriel mysql > Comment obtenir le type de données complet d'une colonne SQL, y compris les paramètres ?

Comment obtenir le type de données complet d'une colonne SQL, y compris les paramètres ?

DDD
Libérer: 2024-12-27 18:58:14
original
387 Les gens l'ont consulté

How to Get the Complete Data Type of a SQL Column Including Parameters?

Obtenir le type de colonne en SQL

Pour obtenir le type de données d'une colonne spécifique dans une table, vous pouvez utiliser le système INFORMATION_SCHEMA.COLUMNS voir. Cette vue est prise en charge dans ISO SQL, y compris SQL Server.

La colonne DATA_TYPE dans la vue INFORMATION_SCHEMA.COLUMNS fournit les noms de types SQL Server/T-SQL de base. Toutefois, notez que ces informations peuvent ne pas inclure d'arguments pour les types paramétrés, ce qui peut entraîner un comportement inattendu dans certains cas.

Par exemple, considérons trois colonnes avec les types de données nvarchar(max), datetime2(3) et décimal(10,5). La sortie INFORMATION_SCHEMA.COLUMNS correspondante affichera uniquement nvarchar, datetime2 et decimal.

Pour reconstruire entièrement les valeurs des paramètres du type, il est recommandé d'examiner des colonnes supplémentaires de la vue INFORMATION_SCHEMA.COLUMNS :

  • CHARACTER_OCTET_LENGTH (pour binaire)
  • CHARACTER_MAXIMUM_LENGTH (pour char et nchar)
  • DATETIME_PRECISION (pour datetime2 et datetimeoffset)
  • NUMERIC_PRECISION et NUMERIC_SCALE (pour décimal et numérique)

Par exemple, ce qui suit La requête SQL montre comment récupérer le type de données détaillé pour une colonne spécifique :

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 renvoie les résultats au format suivant :

TABLE_SCHEMA | TABLE_NAME | ORDINAL_POSITION | COLUMN_NAME | FULL_DATA_TYPE
yourSchemaName | yourTableName | 1 | yourColumnName | nvarchar(max) NOT NULL
Copier après la connexion

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal