Tu a tam se přistihnu, že píšu SHOW TABLES
v SQL Server s očekáváním získání seznamu tabulek.
To by dávalo dokonalý smysl, kdybych používal MySQL nebo MariaDB. Ale SQL Server/T-SQL nemá SHOW TABLES
příkaz jako MySQL nebo MariaDB, takže to nikdy nefunguje. A pořád zapomínám. Ale naštěstí má SQL Server alternativy.
Zde je pět možností, jak získat seznam tabulek na serveru SQL Server. Lze je použít, kdykoli se snažíte najít ten nepolapitelný SHOW TABLES
příkaz v SQL Server.
Možnost 1 – sys.tables
Soubor sys.tables
zobrazení systémového katalogu je navrženo speciálně pro vrácení informací o uživatelské tabulce:
SELECT name
FROM sys.tables;
Vrátí názvy všech uživatelských tabulek v aktuální databázi. Do správné databáze můžete přepnout tak, že před příkaz přidáte USE <database name>
kde <database name>
je název databáze, pro kterou chcete vypsat tabulky.
Například následující příkaz vrátí všechny uživatelské tabulky z KrankyKranes
databáze:
USE KrankyKranes;
SELECT name
FROM sys.tables;
Pokud chcete, můžete schéma také vrátit:
SELECT
SCHEMA_NAME(schema_id) AS schema_name,
name AS table_name
FROM sys.tables;
Zde jsem použil SCHEMA_NAME()
funkce pro překlad hodnoty schema_id
sloupec do skutečného názvu schématu.
Možnost 2 – sys.objects
Můžete také použít sys.objects
zobrazení katalogu systému. Pokud zvolíte tuto možnost, můžete ji filtrovat podle typu, aby byly vráceny pouze uživatelské tabulky:
SELECT name
FROM sys.objects
WHERE type = 'U';
Tím se vrátí uživatelské tabulky z aktuální databáze. Toto zobrazení také obsahuje schema_id
takže můžete použít SCHEMA_NAME()
funkce, která to v případě potřeby přeloží do názvu schématu.
Možnost 3 – information_schema.tables
INFORMATION_SCHEMA.TABLES
view vrátí jeden řádek pro každou tabulku nebo pohled v aktuální databázi, pro kterou má aktuální uživatel oprávnění.
Toto zobrazení můžeme filtrovat podle typu, aby byly vráceny pouze základní tabulky:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';
TABLE_SCHEMA
sloupec obsahuje název schématu tabulky, a proto nemusíme používat SCHEMA_NAME()
funkci převést ID schématu na jeho název.
Možnost 4 – sp_tables
sp_tables
uložená procedura vrátí seznam objektů, které lze v aktuálním prostředí dotazovat. To znamená jakoukoli tabulku nebo pohled, kromě objektů synonym.
Nejrychlejší a nejsnadnější způsob volání této procedury je tento:
sp_tables;
Ale to může vrátit dlouhý seznam objektů.
Obvykle je lepší být konkrétnější. Například:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'KrankyKranes',
@table_type = "'TABLE'";
Zde říkám postup pro zobrazení uživatelských tabulek v KrankyKranes
databáze, které vlastní dbo
.
@table_type
argument přijímá čárkami oddělený seznam hodnot. Pokud bychom tedy chtěli zahrnout pohledy, mohli bychom udělat následující:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'Music',
@table_type = "'TABLE', 'VIEW'";
Možnost 5 – dbo.sysobjects
Před verzí SQL Server 2005 dbo.sysobjects
view byl pohled pro zobrazení tabulek a dalších objektů.
Pokud tedy používáte starou edici SQL Server, můžete to udělat takto:
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U';