Alle tabelnamen van een bepaalde database opvragen via SQL-query?

Ik werk aan een applicatie die overweg kan met meerdere databaseservers zoals “MySQL” en “MS SQL Server”.

Ik wil de namen van tabellen van een bepaalde database krijgen met behulp van een algemene query die geschikt zou moeten zijn voor alle databasetypen. Ik heb het volgende geprobeerd:

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

Maar het geeft tabelnamen van alle databases van een bepaalde server, maar ik wil alleen tabelnamen krijgen van geselecteerde databases. Hoe kan ik deze query beperken om tabellen van een bepaalde database te krijgen?


Antwoord 1, autoriteit 100%

Waarschijnlijk vanwege de manier waarop verschillende sql dbm’s met schema’s omgaan.

Probeer het volgende

Voor SQL Server:

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

Voor MySQL:

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

Voor Oracle denk ik dat het equivalent zou zijn om dba_tableste gebruiken.


Antwoord 2, autoriteit 15%

Gestolen van hier :

USE YOURDBNAME
GO 
SELECT *
FROM sys.Tables
GO

Antwoord 3, autoriteit 5%

De volgende query selecteert alle Tablesin de database met de naam DBName:

USE DBName
GO 
SELECT *
FROM sys.Tables
GO

Antwoord 4, autoriteit 3%

USE DBName;
SELECT * FROM sys.Tables;

We kunnen handelen zonder GOin plaats van dat u puntkomma ;kunt gebruiken.


Antwoord 5, autoriteit 3%

Zet de DATABASE NAMEvoor INFORMATION_SCHEMA.TABLES:

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

Antwoord 6, autoriteit 2%

Gebruik in mysql:

SHOW TABLES;

Na het selecteren van de DB met:

USE db_name

Antwoord 7

Ik heb dit antwoord niet gezien, maar hey, dit is wat ik doe :

SELECT name FROM databaseName.sys.Tables;

Antwoord 8

Voor Mysql kun je eenvoudig doen. TOON TABELLEN;


Antwoord 9

Als iemand alle tabellen in een specifieke database wil weergeven zonder het trefwoord “use” te gebruiken:

SELECT TABLE_NAME FROM databasename.INFORMATION_SCHEMA.TABLES

Antwoord 10

Dit werkt prima

SELECTEER
*
VAN
information_schema.tables;


Antwoord 11

select * from sys.tables
order by schema_id      --comments: order by 'schema_id' to get the 'tables' in 'object explorer order'
go

Antwoord 12

Om de onderstaande databasequery te selecteren:

use DatabaseName

Nu

SELECT * FROM INFORMATION_SCHEMA.TABLES

Nu kun je de gemaakte tabellen hieronder zien in console .

PFA.


Antwoord 13

Exec sp_MSforeachtable 'Select ''?'''

Antwoord 14

USE dbName;
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_SCHEMA = 'dbName' OR TABLE_SCHEMA = 'schemaName')
ORDER BY TABLE_NAME

Als u met meerdere schema’s op een MS SQL-server werkt, kan het SELECTEREN van TABLE_NAME zonder tegelijkertijd TABLE_SCHEMA te selecteren van beperkt voordeel zijn, dus ik heb aangenomen dat we geïnteresseerd zijn in de tabellen die bij een bekend schema horen bij gebruik van MS SQL Server.

Ik heb de bovenstaande query getest met SQL Server Management Studio met een SQL Server-database van mij en met MySQL Workbench met een MySQL-database, en in beide gevallen geeft het de tabelnamen.

De query combineert de twee verschillende query’s van Michael Baylon tot één query die vervolgens op beide databasetypes kan worden uitgevoerd. Het eerste deel van de WHERE-clausule werkt op MySQL-databases en het tweede deel (na de OR) werkt op MS SQL Server-databases. Het is lelijk en logisch gezien een beetje onjuist omdat het veronderstelt dat er geen ongewenst schema is met dezelfde naam als de database. Dit kan iemand helpen die op zoek is naar één enkele query die op beide databaseservers kan worden uitgevoerd.


Antwoord 15

UPDATE VOOR DE LAATSTE VERSIE VAN MSSQL SERVER (17.7)

SELECT name FROM sys.Tables WHERE type_desc = 'USER_TABLE'

Of SELECT *om alle kolommen te krijgen.


Antwoord 16

In onze Oracle DB (PL/SQL) onderstaande code werkt om de lijst van alle bestaande tabellen in onze DB te krijgen.

select * from tab;

en

select table_name from tabs;

beide werken. laten we proberen de jouwe te vinden.


Antwoord 17

Ja, orakel is:

select * from user_tables

Als u alleen objecten wilt die eigendom zijn van de ingelogde user/schema, anders kunt u all_tablesof dba_tablesgebruiken die systeemtabellen bevat .


Antwoord 18

Voortbouwend op het antwoord van Michael Baylon had ik een lijst nodig die ook schema-informatie bevatte en zo heb ik zijn zoekopdracht aangepast.

SELECT TABLE_SCHEMA + '.' + TABLE_NAME as 'Schema.Table'
  FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG = 'dbName'
  ORDER BY TABLE_SCHEMA, TABLE_NAME

Antwoord 19

Verkrijg eenvoudig alle improtanat-informatie met deze onderstaande SQL in Mysql

   SELECT t.TABLE_NAME , t.ENGINE , t.TABLE_ROWS ,t.AVG_ROW_LENGTH, 
t.INDEX_LENGTH FROM 
INFORMATION_SCHEMA.TABLES as t where t.TABLE_SCHEMA = 'YOURTABLENAMEHERE' 
order by t.TABLE_NAME ASC limit 10000;

Other episodes