Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zwróć listę tabel i widoków w SQL Server przy użyciu T-SQL (sp_tables)

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)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj FILEGROUP_ID(), aby zwrócić identyfikator grupy plików w SQL Server

  2. Co to jest plik MDF?

  3. SQL — Odejmowanie wyczerpującej się wartości od wierszy

  4. Jak używać instrukcji IF/ELSE do aktualizacji lub tworzenia nowego wpisu węzła XML w Sql

  5. Użyj OBJECT_NAME(), aby uzyskać nazwę obiektu z jego object_id w SQL Server