Il devrait y avoir un badge pour écrire une question qui se ferme, mais reçoit plus de 100 votes positifs :) OTOH, ce n'est pas surprenant qu'il n'y ait pas de réponse acceptée, car il pose des questions sur plusieurs bases de données, donc je ne suis pas en désaccord avec la décision de fermer . Content que le Q&R soit là.
ToolmakerSteve
Réponses:
255
Pour MySQL, utilisez:
DESCRIBE name_of_table;
Cela fonctionne également pour Oracle tant que vous utilisez SQL * Plus ou Oracle Developer SQL.
L'édition, puisqu'il DESCRIBEne s'agit pas d'une instruction Oracle PLSQL mais d' une commande SQL * Plus , et en tant que telle, elle ne fonctionne pas dans la plupart des IDE SQL.
walen
117
Pour Oracle (PL / SQL)
SELECT column_name
FROM user_tab_cols
WHERE table_name ='myTableName'
Vous voudriez probablement commander la requête Oracle par column_id
David Aldridge
6
Pour Oracle est également valable DESCRIBE name_of_table.
Pigueiras
use <database_name>; afficher les colonnes dans <table_name> comme '<column_prefix>%'; Vous permettra de répertorier uniquement les colonnes commençant par le préfixe spécifié. Omettre les équerres bien sûr.
rstackhouse
quelle est user_tab_colsvotre requête?
Jogi
@Jogi - Google "oracle user_tab_cols" - son intégré à Oracle db.
ToolmakerSteve
103
Pour MS SQL Server:
select*from information_schema.columns where table_name ='tableName'
La colonne qui nous intéresse ici serait COLUMN_NAME.
Buggieboy
4
Cela devrait fonctionner sur de nombreux SGBD. information_schema.columnsla vue du système fait partie de la ANSI SQLnorme ( lien ).
Bogdan Sahlean
4
bonne réponse mais pour éviter les doublons, j'utiliserais:select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
billynoah
Ceci est conforme à la norme ANSI SQL-92 et devrait fonctionner dans tous les moteurs de base de données.
Gareth Davidson
39
(5 ans plus tard, pour l'honneur de PostgreSQL, le DDBB le plus avancé du Royaume)
Dans PostgreSQL:
\d table_name
Ou, en utilisant SQL:
select column_name, data_type, character_maximum_length
from INFORMATION_SCHEMA.COLUMNS
where table_name ='table_name';
J'ai essayé cela dans Oracle et cela n'a pas fonctionné. Le nom_colonne a été imprimé mais rien d'autre. J'ai dû utiliser SELECT CAST (COLUMN_NAME AS CHAR (40)) || '' || DATA_TYPE pour obtenir un bon format et obtenir plusieurs colonnes avec concaténation.
Eamonn Kenny
27
serveur SQL
SELECT
c.name
FROM
sys.objects o
INNERJOIN
sys.columns c
ON
c.object_id = o.object_id
AND o.name ='Table_Name'
ou
SELECT
COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME ='Table_Name'
La deuxième méthode est une norme ANSI et devrait donc fonctionner sur toutes les bases de données conformes à ANSI.
Aucun de ces travaux n'est écrit (ou du moins implicite, comme je l'ai lu) pour MS SQL Server. Dans les deux cas, la colonne de nom de table stocke le nom sans aucun []autour de lui, de sorte que la requête ne doit pas les utiliser, uniquement le nom de table simple. Si ce n'était pas l'intention du PO, sachez-le au moins.
JonBrave
1
@JonBrave - c'est exact, les crochets étaient là pour impliquer "insérer votre nom de table ici" :)
Russ Cam
Étant des crochets, je l'ai lu comme " insérez le nom de votre table entre crochets (à cause d'un mot potentiellement réservé) ici ", puis je <Table Name>n'ai obtenu aucune correspondance :) Peut-être que BNF aurait évité l'ambiguïté. Quoi qu'il en soit, je me suis rendu compte que vous aviez peut-être voulu cela lorsque j'ai écrit le commentaire --- cela ne fait aucun mal d'avertir les autres au cas où.
JonBrave
1
Fonctionne uniquement pour MSSQL s'il n'y a pas de «[]» et que les guillemets «» sont nécessaires autour du nom de la table.
Dans un éditeur de requête, si vous mettez en surbrillance le texte du nom de la table (ex dbo.MyTable) et appuyez sur ALT+F1 , vous obtiendrez une liste de noms de colonnes, type, longueur, etc.
ALT+ F1alors que vous avez mis en évidence dbo.MyTableest l'équivalent de courirEXEC sp_help 'dbo.MyTable' selon ce site
Je ne parviens pas à faire fonctionner les variantes d'interrogation de INFORMATION_SCHEMA.COLUMNS, je l'utilise donc à la place.
Il h? C'est juste faux ... vous ne pouvez utiliser USE que pour les bases de données ... Et la requête renvoie toutes les tables définies par l'utilisateur dans la base de données, ce qui n'est pas ce que l'OP voulait.
Réponses:
Pour MySQL, utilisez:
Cela fonctionne également pour Oracle tant que vous utilisez SQL * Plus ou Oracle Developer SQL.
la source
DESCRIBE
name_of_table``;DESCRIBE
ne s'agit pas d'une instruction Oracle PLSQL mais d' une commande SQL * Plus , et en tant que telle, elle ne fonctionne pas dans la plupart des IDE SQL.Pour Oracle (PL / SQL)
Pour MySQL
la source
DESCRIBE name_of_table
.user_tab_cols
votre requête?Pour MS SQL Server:
la source
information_schema.columns
la vue du système fait partie de laANSI SQL
norme ( lien ).select COLUMN_NAME from information_schema.columns where table_name = 'tableName' and table_schema = 'databaseName'
(5 ans plus tard, pour l'honneur de PostgreSQL, le DDBB le plus avancé du Royaume)
Dans PostgreSQL:
Ou, en utilisant SQL:
la source
Je sais qu'il est tard mais j'utilise cette commande pour Oracle:
la source
serveur SQL
ou
La deuxième méthode est une norme ANSI et devrait donc fonctionner sur toutes les bases de données conformes à ANSI.
la source
[
]
autour de lui, de sorte que la requête ne doit pas les utiliser, uniquement le nom de table simple. Si ce n'était pas l'intention du PO, sachez-le au moins.<Table Name>
n'ai obtenu aucune correspondance :) Peut-être que BNF aurait évité l'ambiguïté. Quoi qu'il en soit, je me suis rendu compte que vous aviez peut-être voulu cela lorsque j'ai écrit le commentaire --- cela ne fait aucun mal d'avertir les autres au cas où.MS SQL Server:
sp_columns [nom_table]
la source
Microsoft SQL Server Management Studio 2008 R2:
Dans un éditeur de requête, si vous mettez en surbrillance le texte du nom de la table (ex dbo.MyTable) et appuyez sur ALT+F1 , vous obtiendrez une liste de noms de colonnes, type, longueur, etc.
ALT+ F1alors que vous avez mis en évidence
dbo.MyTable
est l'équivalent de courirEXEC sp_help 'dbo.MyTable'
selon ce siteJe ne parviens pas à faire fonctionner les variantes d'interrogation de INFORMATION_SCHEMA.COLUMNS, je l'utilise donc à la place.
la source
serveur SQL
Pour répertorier toutes les tables définies par l'utilisateur d'une base de données:
Pour répertorier toutes les colonnes d'un tableau:
la source
Pour SQL Server
la source
Juste une légère correction sur les autres dans SQL Server (le préfixe de schéma devient plus important!):
la source
Exemple:
Juste mon code
la source