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_tables
te 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 Tables
in 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 GO
in plaats van dat u puntkomma ;
kunt gebruiken.
Antwoord 5, autoriteit 3%
Zet de DATABASE NAME
voor 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_tables
of dba_tables
gebruiken 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;