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