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;
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!