375 votes

Obtenir tous les noms de tables d'une base de données particulière par une requête SQL ?

Je travaille sur une application qui peut gérer plusieurs serveurs de base de données comme "MySQL" et "MS SQL Server".

Je souhaite obtenir les noms des tables d'une base de données particulière à l'aide d'une requête générale qui devrait convenir à tous les types de bases de données. J'ai essayé ce qui suit :

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'

Mais il donne les noms des tables de toutes les bases de données d'un serveur particulier, alors que je veux obtenir les noms des tables de la base de données sélectionnée uniquement. Comment puis-je restreindre cette requête pour obtenir les tables d'une base de données particulière ?

1 votes

Pour Mysql, vous pouvez faire simple. SHOW TABLES ;

598voto

Michael Baylon Points 846

Cela est probablement dû à la façon dont les différents systèmes de gestion de bases de données SQL gèrent les schémas.

Essayez ce qui suit

Pour SQL Server :

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='dbName'

Pour MySQL :

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName' 

Pour Oracle, je pense que l'équivalent serait d'utiliser DBA_TABLES .

3 votes

Je préfère cette solution lorsque j'ai différents schémas de table dans une base de données (SQL Server) : SELECT CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='MyDB'

5 votes

Il faut utiliser cette DB pour obtenir les informations. USE dbName GO pour SQL-Server. Si vous n'utilisez pas le DB Le résultat ne sera pas affiché, même s'il y a des tables dans cette base de données.

3 votes

Pour Mysql, vous pouvez faire simple. SHOW TABLES ;

93voto

bla Points 2739

Volé à ici :

USE YOURDBNAME
GO 
SELECT *
FROM sys.Tables
GO

4 votes

Très probablement SELECT Name FROM sys.Tables where is_ms_shipped = 0

1 votes

Ceci est spécifique au fournisseur de base de données et n'est pas compatible avec ANSI SQL.

2 votes

Vous pouvez également utiliser SELECT * FROM yourdbname.sys.Tables ; si vous préférez être plus concis. Cette méthode fonctionne au moins avec SQL Server.

33voto

anishMarokey Points 6895

La requête suivante permet de sélectionner tous les Tables dans la base de données nommée DBName :

USE DBName
GO 
SELECT *
FROM sys.Tables
GO

0 votes

Non, il s'agit seulement d'un séparateur de partie. Vous pouvez le remplacer par un autre. Ce n'est pas une syntaxe T-SQL.

1 votes

USE DatabaseSample SELECT * FROM sys.Tables

18voto

Gops Points 166
USE DBName;
SELECT * FROM sys.Tables;

Nous pouvons faire sans GO à la place de vous pouvez utiliser le point-virgule ; .

3 votes

Pour SQL Server on Azure, cela a fonctionné pour moi, mais pas la réponse acceptée. Je vous remercie.

17voto

David S Points 21

Il suffit de mettre le DATABASE NAME devant INFORMATION_SCHEMA.TABLES :

select table_name from YOUR_DATABASE.INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X