Dépend du SGBDR; SQL Server a la sys.syscolumnstable par exemple.
LittleBobbyTables - Au Revoir
3
Oui, mais ce sera différent selon le type de SGBDR que vous utilisez - SQL est un langage, pas le produit de base de données, et cette question dépend du produit spécifique. Vous pourrez trouver ce type d'informations dans le INFORMATION_SCHEMA.COLUMNStableau - si votre SGBDR en dispose.
Pont du
Réponses:
461
Utilisation de SQL Server:
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME ='yourTableName'AND
COLUMN_NAME ='yourColumnName'
Uniquement si vous ne souhaitez pas voir le nom de colonne correspondant. Cela ne renverra que les types. Si vous voulez voir le nom de la colonne à laquelle le type appartient, vous devrez également sélectionner COLUMN_NAME ...
HackyStack
5
Et si votre table n'est pas dans le schéma par défaut, vous pouvez étendre la condition avecAND TABLE_SCHEMA = 'yourSchema'
luviktor
8
c'est très bien - mais est-il possible de lui aussi retourner la plage pour le type de colonne? c'est à dire varchar(255)au lieu de varcharet int(11)au lieu de int?
Don Cheadle
13
@mmcrae: Il est possible d'utiliser la colonne CHARACTER_MAXIMUM_LENGTHdans INFORMATION_SCHEMA.COLUMNS. Faites juste un SELECT * FROM INFORMATION_SCHEMA.COLUMNSpour voir toutes les colonnes disponibles.
Francis P
2
Et les tables temporaires?
Ilya Gazman
77
Le moyen le plus simple dans TSQL est:
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME ='yourTableName'
J'ai voté positivement car ce n'est pas exactement la réponse, mais cela me fournit de précieuses informations. Par exemple, les informations "IsComputed" que je n'ai pas trouvées dans le schéma Information mais que je peux trouver dans le code de procédure sp_help et copier à partir de là.
Christoph
2
sélectionnez le nom de la table et cliquez sur Alt+F1.. donne le même résultat.
Pugal
pour clarifier: le nom de la table ou de la vue doit être sélectionné dans l'éditeur puis appuyer sur Alt+F1. Pas dans la solution Object Explorer. Ceci est une fonctionnalité très utile
bugybunny
18
Dans TSQL / MSSQL, cela ressemble à:
SELECT t.name, c.name
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types y ON y.user_type_id = c.user_type_id
WHERE t.name =''
Dans le cas contraire, vous voulez dire d'autres SGBDR en dehors de MySQL?
Lamak
2
Oui. La DESCRIBEsyntaxe est également valable dans Oracle, mais MsSQL n'acceptera pas cette syntaxe.
fimas
Voir la réponse de @jTC pour la méthode sur MSSQL et TSQL.
fimas
Les nouvelles versions de MySQL ont information_schema.COLUMNS.
Rick James
Je trouve DESC OU DESCRIBE (selon le SGBD que vous utilisez) utile pour les petites tables à 3 ou 4 colonnes, puis il montre la structure de la table avec le nom de la colonne Indicateur Nullable et le type de colonne pour les grandes tables, mais cela prend plus de temps pour renvoyer un résultat et il est plus difficile de trouver les informations dont vous avez besoin.
velocity
7
Une autre variante utilisant MS SQL:
SELECT TYPE_NAME(system_type_id)FROM sys.columns
WHERE name ='column_name'AND[object_id]= OBJECT_ID('[dbo].[table_name]');
Pour s'appuyer sur les réponses ci-dessus, il est souvent utile d'obtenir le type de données de colonne dans le même format que celui dont vous avez besoin pour déclarer des colonnes.
Par exemple, varchar(50), varchar(max),decimal(p, s) .
Cela vous permet de faire cela:
SELECT[Name]= c.[name],[Type]=CASEWHEN tp.[name]IN('varchar','char')THEN tp.[name]+'('+ IIF(c.max_length =-1,'max', CAST(c.max_length AS VARCHAR(25)))+')'WHEN tp.[name]IN('nvarchar','nchar')THEN tp.[name]+'('+ IIF(c.max_length =-1,'max', CAST(c.max_length /2AS VARCHAR(25)))+')'WHEN tp.[name]IN('decimal','numeric')THEN tp.[name]+'('+ CAST(c.[precision]AS VARCHAR(25))+', '+ CAST(c.[scale]AS VARCHAR(25))+')'WHEN tp.[name]IN('datetime2')THEN tp.[name]+'('+ CAST(c.[scale]AS VARCHAR(25))+')'ELSE tp.[name]END,[RawType]= tp.[name],[MaxLength]= c.max_length
,[Precision]= c.[precision],[Scale]= c.scale
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types tp ON c.user_type_id = tp.user_type_id
WHERE s.[name]='dbo'AND t.[name]='MyTable'
Cela aurait dû être la réponse acceptée. Merci, vous pouvez peut-être ajouter la condition (t.type = 'U') - supprimer la table système
Iannick
Et les types VARBINARY pourraient facilement être pris en charge en ajoutant cela à la première WHENligne:WHEN tp.[name] IN ('varchar', 'char', 'varbinary') THEN...
Ingénieur inversé
3
USE[YourDatabaseName]
GO
SELECT column_name 'Column Name',
data_type 'Data Type'FROM information_schema.columns
WHERE table_name ='YourTableName'
GO
Cela renverra les valeurs Nom de colonne, vous montrant les noms des colonnes et les types de données de ces colonnes (ints, varchars, etc.).
Pour récupérer les types de données déclarés réels, par exemple pour une utilisation en SQL dynamique vers ALTER COLUMN, quelque chose comme ceci peut être utilisé:
Dans mon cas, j'avais besoin d'obtenir le type de données pour Dynamic SQL (Shudder!) De toute façon voici une fonction que j'ai créée qui renvoie le type de données complet. Par exemple, au lieu de renvoyer «décimal», il retournerait DECIMAL (18,4): dbo.GetLiteralDataType
Utilisez cette requête pour obtenir le schéma, la table, la colonne, le type, max_length, is_nullable
SELECT QUOTENAME(SCHEMA_NAME(tb.[schema_id]))AS'Schema',QUOTENAME(OBJECT_NAME(tb.[OBJECT_ID]))AS'Table',C.NAME as'Column',T.name AS'Type',C.max_length
,C.is_nullable
FROM SYS.COLUMNS C INNERJOIN SYS.TABLES tb ON tb.[object_id]= C.[object_id]INNERJOIN SYS.TYPES T ON C.system_type_id = T.user_type_id
WHERE tb.[is_ms_shipped]=0ORDERBY tb.[Name]
select columndatatype from sys.syscolumns
where referenceid =(select tableid from sys.systables
where tablename ='YOUR_TABEL_NAME'and columnname='YOUR_COLUMN_NAME')
Public Cn As ADODB.Connection
'open connection
Dim Rs As ADODB.Recordset
Set Rs = Cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, UCase("Table"), UCase("field")))
'et échantillon (valRs est ma fonction pour rs.fields ("CHARACTER_MAXIMUM_LENGTH"). value):
sys.syscolumns
table par exemple.INFORMATION_SCHEMA.COLUMNS
tableau - si votre SGBDR en dispose.Réponses:
Utilisation de SQL Server:
la source
AND TABLE_SCHEMA = 'yourSchema'
varchar(255)
au lieu devarchar
etint(11)
au lieu deint
?CHARACTER_MAXIMUM_LENGTH
dansINFORMATION_SCHEMA.COLUMNS
. Faites juste unSELECT * FROM INFORMATION_SCHEMA.COLUMNS
pour voir toutes les colonnes disponibles.Le moyen le plus simple dans TSQL est:
la source
Pour SQL Server, cette procédure stockée système renvoie toutes les informations de table, y compris les types de données de colonne:
la source
Alt+F1
.. donne le même résultat.Alt+F1
. Pas dans la solution Object Explorer. Ceci est une fonctionnalité très utileDans TSQL / MSSQL, cela ressemble à:
la source
JOIN sys.types y ON y.user_type_id = c.user_type_id
system_type_id n'est pas unique. doc sys.columnsdans oracle SQL, vous feriez ceci:
la source
Si vous utilisez MySQL, vous pouvez essayer
AFFICHER LES COLONNES sur dev.mysql.com
Sinon, vous devriez pouvoir faire
la source
DESCRIBE
syntaxe est également valable dans Oracle, mais MsSQL n'acceptera pas cette syntaxe.information_schema.COLUMNS
.Une autre variante utilisant MS SQL:
la source
Utilisation de TSQL / MSSQL
Cette requête vous obtiendra: nom de la table, nom de la colonne, type de données, longueur du type de données et valeurs NULL autorisées
La seule chose qui doit être modifiée est votre_nom_table.
la source
Pour s'appuyer sur les réponses ci-dessus, il est souvent utile d'obtenir le type de données de colonne dans le même format que celui dont vous avez besoin pour déclarer des colonnes.
Par exemple,
varchar(50)
,varchar(max)
,decimal(p, s)
.Cela vous permet de faire cela:
la source
WHEN
ligne:WHEN tp.[name] IN ('varchar', 'char', 'varbinary') THEN...
Cela renverra les valeurs Nom de colonne, vous montrant les noms des colonnes et les types de données de ces colonnes (ints, varchars, etc.).
la source
Pour IBM DB2 :
la source
Pour récupérer les types de données déclarés réels, par exemple pour une utilisation en SQL dynamique vers ALTER COLUMN, quelque chose comme ceci peut être utilisé:
la source
Dans mon cas, j'avais besoin d'obtenir le type de données pour Dynamic SQL (Shudder!) De toute façon voici une fonction que j'ai créée qui renvoie le type de données complet. Par exemple, au lieu de renvoyer «décimal», il retournerait DECIMAL (18,4): dbo.GetLiteralDataType
la source
Utilisation de TSQL / MSSQL
Vous pouvez utiliser un
INTO
mot-clé.Le résultat de
SELECT
dans une vraie tableExemple:
select .... INTO real_table_name
Après
la source
Utilisez cette requête pour obtenir le schéma, la table, la colonne, le type, max_length, is_nullable
la source
Il vous donnera des informations sur toutes les colonnes du tableau.
la source
Pour Spark SQL :
la source
Pour Apache Derby, comme indiqué dans cette réponse :
la source
Dans vb60, vous pouvez faire ceci:
'et échantillon (valRs est ma fonction pour rs.fields ("CHARACTER_MAXIMUM_LENGTH"). value):
la source
Étant donné que certaines personnes demandaient également la précision du type de données, je voudrais partager mon script que j'ai créé à cette fin.
Ce n'est pas parfait mais cela fonctionne dans la plupart des cas.
En utilisant
Sql-Server
la source
Une autre option pour MS SQL consiste à remplacer la
select
requête ici par la requête pour laquelle vous voulez les types:la source