W SQL Server możesz użyć sp_tables
systemowa procedura składowana, aby uzyskać listę tabel i widoków w bieżącym środowisku.
Możesz zwrócić wszystkie tabele i widoki lub zawęzić je do konkretnego właściciela, typu, wzorca, a nawet określonej tabeli lub widoku.
Składnia
Składnia wygląda tak:
sp_tables [ [ @table_name = ] 'name' ] [ , [ @table_owner = ] 'owner' ] [ , [ @table_qualifier = ] 'qualifier' ] [ , [ @table_type = ] "type" ] [ , [@fUsePattern = ] 'fUsePattern'];
Wszystkie argumenty są opcjonalne.
Przykład 1 – brak argumentów
Tę procedurę składowaną można wykonać bez żadnych argumentów. Spowoduje to zwrócenie wszystkich tabel i widoków w bieżącym środowisku.
Tak:
EXEC sp_tables;
Zwraca to ponad 500 wierszy w moim systemie, więc nie podam tutaj wyników. Oprócz zwracania tabel i widoków zdefiniowanych przez użytkownika, zwraca również obiekty systemowe, takie jak sys
i INFORMATION_SCHEMA
tabele i widoki.
Przykład 2 – Wszystkie argumenty
Na drugim biegunie mamy przykład, który zawiera wszystkie argumenty. To zawęża wyniki do określonej nazwy tabeli, określonego typu, określonego kwalifikatora i określonego właściciela.
EXEC sp_tables @table_name = 'Customers', @table_owner = 'Sales', @table_qualifier = 'WideWorldImporters', @table_type = "'TABLE'", @fUsePattern = 1;
Wynik:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Przykład 3 – Zwróć określoną tabelę
Łatwiejszym sposobem na zwrócenie określonej tabeli jest po prostu użycie pierwszego argumentu.
Tak:
EXEC sp_tables @table_name = 'Customers';
Lub jeszcze bardziej zwięźle, jak jeden z tych:
EXEC sp_tables 'Customers'; sp_tables 'Customers';
Pamiętaj jednak, że możesz uzyskać więcej niż jeden wiersz. W tym przykładzie zwracane są dwa wiersze:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | | WideWorldImporters | Website | Customers | VIEW | NULL | +--------------------+---------------+--------------+--------------+-----------+
Pierwszy wiersz przeznaczony jest na tabelę, a drugi na widok.
Gdybym nie był zainteresowany oglądaniem widoków ani tabel systemowych, mógłbym dodać jeszcze jeden argument, aby określić typ tabeli.
Przykład 4 – Zwróć określony typ tabeli
Tutaj dopracowuję poprzedni przykład, określając tylko typ tabeli, który mnie interesuje, wraz z nazwą tabeli.
EXEC sp_tables @table_name = 'Customers', @table_type = "'TABLE'";
Wynik:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Dopuszczalne typy to VIEW
, TABLE
i SYSTEMTABLE
.
Pamiętaj, że typy tabel muszą być pisane wielkimi literami.
Przykład 5 – Zwróć wiele typów tabel
Być może zauważyłeś, że składnia typu tabeli używa pojedynczych cudzysłowów i podwójne cudzysłowy. Dzieje się tak, ponieważ akceptuje listę typów tabel oddzielonych przecinkami. Cała lista jest ujęta w podwójne cudzysłowy, a każdy element listy jest ujęty w pojedyncze cudzysłowy, z przecinkiem oddzielającym każdy element.
Oto przykład zwracania typów tabel TABLE
i VIEW
.
EXEC sp_tables @table_type = "'TABLE','VIEW'";
Zauważ, że jeśli SET QUOTED_IDENTIFIER
jest ON
, każdy pojedynczy cudzysłów musi być podwojony, a cały parametr musi być ujęty w pojedynczy cudzysłów.
Przykład 6 — uwaga na temat argumentu kwalifikującego tabelę
Jeśli używasz @table_qualifier
argument, jego wartość musi być taka sama jak w bieżącym środowisku, w przeciwnym razie otrzymasz błąd. W SQL Server kwalifikator tabeli reprezentuje nazwę bazy danych. W niektórych produktach reprezentuje nazwę serwera środowiska bazy danych tabeli.
Oto, co dzieje się w SQL Server, jeśli użyję wartości innej niż bieżąca baza danych:
USE Music; EXEC sp_tables @table_qualifier = 'WideWorldImporters';
Wynik:
Msg 15250, Level 16, State 1, Procedure sp_tables, Line 86 The database name component of the object qualifier must be the name of the current database.
Przykład 7 – Symbole wieloznaczne
Możesz użyć @fUsePattern
argument określający, czy podkreślenie ( _
), procent ( %
) i nawias ( [
lub ]
) znaki są interpretowane jako symbole wieloznaczne. Prawidłowe wartości to 0
(dopasowanie wzorca jest wyłączone) i 1
(dopasowywanie wzorców jest włączone). Domyślna wartość to 1
.
Oto przykład użycia dopasowywania wzorców do zwracania nazw tabel zaczynających się na literę „A”:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 1;
Wynik:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | Music | dbo | Albums | TABLE | NULL | | Music | dbo | Artists | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
Ale oto, co się stanie, jeśli wyłączę dopasowanie do wzorca:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 0;
Wynik:
(0 rows affected)