Pracuję nad aplikacją, która może obsługiwać wiele serwerów baz danych, takich jak „MySQL” i „MS SQL Server”.
Chcę uzyskać nazwy tabel konkretnej bazy danych za pomocą ogólnego zapytania, które powinno być odpowiednie dla wszystkich typów baz danych. Próbowałem następujące:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
Podaje jednak nazwy tabel wszystkich baz danych konkretnego serwera, ale chcę uzyskać tylko nazwy tabel wybranych baz danych. Jak mogę ograniczyć to zapytanie, aby uzyskać tabele konkretnej bazy danych?
sql
sql-server
Awan
źródło
źródło
Odpowiedzi:
Prawdopodobnie ze względu na sposób, w jaki różne sqm dbms radzą sobie ze schematami.
Spróbuj wykonać następujące czynności
W przypadku programu SQL Server:
W przypadku MySQL:
Wydaje mi się, że w przypadku Oracle będzie to odpowiednik
DBA_TABLES
.źródło
USE dbName GO
dla serwera SQL. Jeśli nie korzystasz z bazy danych , wynik nie zostanie wyświetlony, nawet jeśli w tej bazie danych znajdują się tabele.USE dbName GO
prefiksu na serwerze 2014.Skradziono stąd :
źródło
Następujące zapytanie wybierze wszystkie
Tables
w bazie danych o nazwieDBName
:źródło
Możemy radzić sobie bez
GO
ciebie zamiast średnika;
.źródło
Wystarczy umieścić
DATABASE NAME
przedINFORMATION_SCHEMA.TABLES
:źródło
W mysql użyj:
Po wybraniu DB za pomocą:
źródło
Nie widziałem tej odpowiedzi, ale hej, oto co robię:
źródło
W Mysql możesz zrobić to proste. POKAŻ TABELE;
źródło
źródło
źródło
sp_MSforeachtable
?Jeśli pracujesz z wieloma schematami na serwerze MS SQL, to WYBÓR TABELI bez jednoczesnego wybrania TABELI_SCHEMA może mieć ograniczoną korzyść, więc założyłem, że interesują nas tabele należące do znanego schematu podczas korzystania z MS SQL Server.
Testowałem powyższe zapytanie w SQL Server Management Studio przy użyciu mojej bazy danych SQL Server oraz w MySQL Workbench przy użyciu bazy danych MySQL, aw obu przypadkach podaje nazwy tabel.
Kwerenda dzieli dwa różne zapytania Michaela Baylona w jedno, które można następnie uruchomić na dowolnym typie bazy danych. Pierwsza część klauzuli WHERE działa na bazach danych MySQL, a druga część (po OR) działa na bazach danych MS SQL Server. Jest brzydka i logicznie trochę niepoprawna, ponieważ zakłada, że nie ma niepożądanego schematu o takiej samej nazwie jak baza danych. Może to pomóc komuś, kto szuka jednego zapytania, które można uruchomić na dowolnym serwerze bazy danych.
źródło
AKTUALIZACJA NAJNOWSZEJ WERSJI SERWERA MSSQL (17.7)
Lub
SELECT *
uzyskać wszystkie kolumny.źródło
Aby wybrać zapytanie do bazy danych poniżej:
Teraz
Teraz możesz zobaczyć utworzone tabele poniżej w konsoli.
PFA.
źródło
Tak, wyrocznia to:
To znaczy, jeśli chcesz tylko obiektów należących do zalogowanego, w
user/schema
przeciwnym razie możesz użyćall_tables
lubdba_tables
który zawiera tabele systemowe.źródło
Opierając się na odpowiedzi Michaela Baylona, potrzebowałem listy zawierającej również informacje o schemacie i tak zmodyfikowałem jego zapytanie.
źródło
W naszym Oracle DB (PL / SQL) poniższy kod działa, aby uzyskać listę wszystkich istniejących tabel w naszym DB.
i
oba działają. spróbujmy znaleźć twoje.
źródło
Po prostu uzyskaj wszystkie informacje o improtanacie za pomocą poniższego kodu SQL w MySQL
źródło