Od czasu do czasu piszę POKAŻ TABEL
w SQL Server, spodziewając się uzyskać listę tabel.
To miałoby sens, gdybym używał MySQL lub MariaDB. Ale SQL Server/T-SQL nie ma opcji SHOW TABLES
oświadczenie takie jak MySQL lub MariaDB, więc nigdy nie działa. I ciągle zapominam. Ale na szczęście SQL Server ma alternatywy.
Oto pięć opcji uzyskania listy tabel w SQL Server. Mogą być używane za każdym razem, gdy próbujesz znaleźć nieuchwytne POKAŻ TABELE
instrukcja w SQL Server.
Opcja 1 – sys.tables
sys.tables
Widok katalogu systemowego został zaprojektowany specjalnie do zwracania informacji o tabeli użytkownika:
SELECT name
FROM sys.tables;
Zwraca nazwy wszystkich tabel użytkowników w bieżącej bazie danych. Możesz przełączyć się do właściwej bazy danych, dodając instrukcję USE
gdzie
Na przykład poniższa instrukcja zwraca wszystkie tabele użytkowników z KrankyKranes
baza danych:
USE KrankyKranes;
SELECT name
FROM sys.tables;
Jeśli chcesz, możesz również zwrócić schemat:
SELECT
SCHEMA_NAME(schema_id) AS schema_name,
name AS table_name
FROM sys.tables;
Tutaj użyłem SCHEMA_NAME()
funkcja do tłumaczenia wartości schema_id
kolumnę do rzeczywistej nazwy schematu.
Opcja 2 – sys.objects
Możesz także użyć sys.objects
widok katalogu systemowego. Jeśli wybierzesz tę opcję, możesz filtrować ją według typu, aby zwracane były tylko tabele użytkowników:
SELECT name
FROM sys.objects
WHERE type = 'U';
Zwraca tabele użytkowników z bieżącej bazy danych. Ten widok zawiera również schema_id
kolumny, więc możesz użyć SCHEMA_NAME()
w razie potrzeby przetłumaczyć to na nazwę schematu.
Opcja 3 – information_schema.tables
INFORMATION_SCHEMA.TABLES
view zwraca jeden wiersz dla każdej tabeli lub widoku w bieżącej bazie danych, do których bieżący użytkownik ma uprawnienia.
Możemy filtrować ten widok według typu, aby zwracane były tylko tabele podstawowe:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';
TABLE_SCHEMA
kolumna zawiera nazwę schematu tabeli, więc nie musimy używać SCHEMA_NAME()
funkcja do konwersji identyfikatora schematu na jego nazwę.
Opcja 4 – sp_tables
sp_tables
procedura składowana zwraca listę obiektów, które mogą być odpytywane w bieżącym środowisku. Oznacza to dowolną tabelę lub widok, z wyjątkiem obiektów synonimów.
Najszybszy i najłatwiejszy sposób wywołania tej procedury jest następujący:
sp_tables;
Ale to może zwrócić długą listę obiektów.
Zwykle lepiej jest być bardziej konkretnym. Na przykład:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'KrankyKranes',
@table_type = "'TABLE'";
Tutaj mówię o procedurze, aby pokazać tabele użytkowników w KrankyKranes
bazy danych, które są własnością dbo
.
@table_type
argument przyjmuje listę wartości oddzielonych przecinkami. Jeśli więc chcielibyśmy uwzględnić widoki, moglibyśmy wykonać następujące czynności:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'Music',
@table_type = "'TABLE', 'VIEW'";
Opcja 5 – dbo.sysobjects
Przed SQL Server 2005 dbo.sysobjects
widok był widokiem do pokazywania tabel i innych obiektów.
Więc jeśli używasz starej wersji SQL Server, możesz to zrobić:
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U';