Je travaille sur une application qui peut gérer plusieurs serveurs de bases de données comme "MySQL" et "MS SQL Server".
Je veux obtenir les noms des tables d'une base de données particulière en utilisant une requête générale qui devrait convenir à tous les types de base de données. J'ai essayé de suivre:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
Mais il donne les noms de table de toutes les bases de données d'un serveur particulier, mais je veux obtenir les noms de tables de la base de données sélectionnée uniquement. Comment puis-je restreindre cette requête pour obtenir des tables d'une base de données particulière?
sql
sql-server
Awan
la source
la source
Réponses:
Probablement en raison de la manière dont différents dbms sql traitent les schémas.
Essayez ce qui suit
Pour SQL Server:
Pour MySQL:
Pour Oracle, je pense que l'équivalent serait d'utiliser
DBA_TABLES
.la source
USE dbName GO
pour SQL-Server. Si vous n'utilisez pas la base de données , le résultat ne sera pas affiché, même s'il existe des tables dans cette base de données.USE dbName GO
préfixe sur Server 2014.Volé d' ici :
la source
La requête suivante sélectionnera tous les éléments
Tables
de la base de données nommésDBName
:la source
Nous pouvons traiter sans
GO
à la place de vous pouvez utiliser un point-virgule;
.la source
Mettez juste
DATABASE NAME
devantINFORMATION_SCHEMA.TABLES
:la source
Dans mysql, utilisez:
Après avoir sélectionné la DB avec:
la source
Je n'ai pas vu cette réponse mais bon voici ce que je fais:
la source
Pour Mysql, vous pouvez faire simple. AFFICHER LES TABLES;
la source
la source
la source
sp_MSforeachtable
?Si vous travaillez avec plusieurs schémas sur un serveur MS SQL, alors SELECT-ing TABLE_NAME sans également sélectionner simultanément TABLE_SCHEMA pourrait être d'un avantage limité, donc j'ai supposé que nous sommes intéressés par les tables appartenant à un schéma connu lors de l'utilisation de MS SQL Server.
J'ai testé la requête ci-dessus avec SQL Server Management Studio en utilisant une de mes bases de données SQL Server et avec MySQL Workbench en utilisant une base de données MySQL, et dans les deux cas, elle donne les noms des tables.
La requête contient deux requêtes différentes de Michael Baylon en une seule qui peut ensuite s'exécuter sur l'un ou l'autre type de base de données. La première partie de la clause WHERE fonctionne sur les bases de données MySQL et la seconde partie (après le OU) fonctionne sur les bases de données MS SQL Server. C'est moche et logiquement un peu incorrect car cela suppose qu'il n'y a pas de schéma indésirable avec le même nom que la base de données. Cela pourrait aider quelqu'un qui recherche une seule requête pouvant s'exécuter sur l'un des serveurs de base de données.
la source
MISE À JOUR DE LA DERNIÈRE VERSION DU SERVEUR MSSQL (17.7)
Ou
SELECT *
pour obtenir toutes les colonnes.la source
Pour sélectionner la requête de base de données ci-dessous:
Maintenant
Vous pouvez maintenant voir les tableaux créés ci-dessous dans la console.
PFA.
la source
Oui, Oracle est:
C'est-à-dire si vous ne voulez que des objets appartenant aux personnes connectées,
user/schema
sinon vous pouvez utiliserall_tables
oudba_tables
qui inclut des tables système.la source
Sur la base de la réponse de Michael Baylon, j'avais besoin d'une liste qui comprenait également des informations sur le schéma et c'est ainsi que j'ai modifié sa requête.
la source
Dans notre base de données Oracle (PL / SQL) ci-dessous, le code fonctionne pour obtenir la liste de toutes les tables existantes dans notre base de données.
et
les deux fonctionnent. essayons de trouver le vôtre.
la source
Obtenez simplement toutes les informations improtanat avec ceci ci-dessous SQL dans Mysql
la source