V SQL Server můžete použít sp_tables
systémová uložená procedura k získání seznamu tabulek a pohledů v aktuálním prostředí.
Můžete vrátit všechny tabulky a pohledy, nebo je můžete zúžit na konkrétního vlastníka, typ, vzor nebo dokonce na konkrétní tabulku či pohled.
Syntaxe
Syntaxe vypadá takto:
sp_tables [ [ @table_name = ] 'name' ] [ , [ @table_owner = ] 'owner' ] [ , [ @table_qualifier = ] 'qualifier' ] [ , [ @table_type = ] "type" ] [ , [@fUsePattern = ] 'fUsePattern'];
Všechny argumenty jsou volitelné.
Příklad 1 – Žádné argumenty
Tuto uloženou proceduru můžete spustit bez jakýchkoli argumentů. Tím se vrátí všechny tabulky a pohledy v aktuálním prostředí.
Takhle:
EXEC sp_tables;
To vrátí více než 500 řádků v mém systému, takže zde nebudu poskytovat výsledky. Kromě toho, že vrací uživatelem definované tabulky a pohledy, vrací také systémové objekty, jako je sys
a INFORMATION_SCHEMA
tabulky a pohledy.
Příklad 2 – Všechny argumenty
V druhém extrému je zde příklad, který zahrnuje všechny argumenty. To zúží výsledky na konkrétní název tabulky, konkrétní typ, konkrétní kvalifikátor a konkrétního vlastníka.
EXEC sp_tables @table_name = 'Customers', @table_owner = 'Sales', @table_qualifier = 'WideWorldImporters', @table_type = "'TABLE'", @fUsePattern = 1;
Výsledek:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Příklad 3 – Vrácení konkrétní tabulky
Jednodušší způsob, jak vrátit konkrétní tabulku, je jednoduše použít první argument.
Takhle:
EXEC sp_tables @table_name = 'Customers';
Nebo ještě stručněji, jako jeden z těchto:
EXEC sp_tables 'Customers'; sp_tables 'Customers';
Mějte však na paměti, že můžete získat více než jeden řádek. V tomto příkladu jsou vráceny dva řádky:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | | WideWorldImporters | Website | Customers | VIEW | NULL | +--------------------+---------------+--------------+--------------+-----------+
První řádek je pro tabulku a druhý řádek je pro pohled.
Pokud jsem neměl zájem o zobrazení žádných pohledů nebo systémových tabulek, mohl bych přidat ještě jeden argument pro určení typu tabulky.
Příklad 4 – Vrácení určitého typu tabulky
Zde upřesním předchozí příklad zadáním pouze typu tabulky, která mě zajímá, spolu s názvem tabulky.
EXEC sp_tables @table_name = 'Customers', @table_type = "'TABLE'";
Výsledek:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Mezi přijatelné typy patří VIEW
, TABLE
a SYSTEMTABLE
.
Pamatujte, že typy tabulek musí být velká.
Příklad 5 – Vrácení více typů tabulek
Možná jste si všimli, že syntaxe pro typ tabulky používá jednoduché uvozovky a dvojité uvozovky. Je to proto, že přijímá čárkami oddělený seznam typů tabulek. Celý seznam je uzavřen do dvojitých uvozovek a každá položka seznamu je uzavřena do jednoduchých uvozovek, přičemž jednotlivé položky jsou odděleny čárkou.
Zde je příklad vracení typů tabulek TABLE
a VIEW
.
EXEC sp_tables @table_type = "'TABLE','VIEW'";
Upozorňujeme, že pokud SET QUOTED_IDENTIFIER
je ON
, každá jednoduchá uvozovka musí být zdvojená a celý parametr musí být uzavřen do jednoduchých uvozovek.
Příklad 6 – Poznámka k argumentu kvalifikátoru tabulky
Pokud použijete @table_qualifier
argument, jeho hodnota musí být stejná jako aktuální prostředí, jinak dostanete chybu. Na serveru SQL Server představuje kvalifikátor tabulky název databáze. V některých produktech představuje název serveru databázového prostředí tabulky.
Zde je to, co se stane v SQL Server, pokud použiji hodnotu, která se liší od aktuální databáze:
USE Music; EXEC sp_tables @table_qualifier = 'WideWorldImporters';
Výsledek:
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.
Příklad 7 – Zástupné znaky
Můžete použít @fUsePattern
argument určující, zda podtržítko ( _
), procenta ( %
) a závorka ( [
nebo ]
) znaky jsou interpretovány jako zástupné znaky. Platné hodnoty jsou 0
(shoda vzorů je vypnutá) a 1
(porovnávání vzorů je zapnuto). Výchozí hodnota je 1
.
Zde je příklad použití shody vzorů k vrácení názvů tabulek, které začínají písmenem „A“:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 1;
Výsledek:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | Music | dbo | Albums | TABLE | NULL | | Music | dbo | Artists | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
Ale co se stane, když zakážu párování vzorů:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 0;
Výsledek:
(0 rows affected)