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)