От време на време се улавям, че пиша ПОКАЖЕТЕ ТАБЛИЦИТЕ
в SQL Server, очаквайки да получите списък с таблици.
Това би имало идеален смисъл, ако използвах MySQL или MariaDB. Но SQL Server/T-SQL няма SHOW TABLES
изявление като MySQL или MariaDB, така че никога не работи. И продължавам да забравям. Но за щастие SQL Server има алтернативи.
Ето пет опции за получаване на списък с таблици в SQL Server. Те могат да се използват винаги, когато се опитвате да намерите този неуловим ПОКАЖЕТЕ ТАБЛИЦИ
изявление в SQL Server.
Опция 1 – sys.tables
sys.tables
Изгледът на системния каталог е проектиран специално за връщане на информация за потребителска таблица:
SELECT name
FROM sys.tables;
Това връща името на всички потребителски таблици в текущата база данни. Можете да превключите към правилната база данни, като поставите преди изявлението USE <име на база данни>
където <име на база данни>код> е името на базата данни, за които искате да бъдат изброени таблиците.
Например, следният оператор връща всички потребителски таблици от KrankyKranes
база данни:
USE KrankyKranes;
SELECT name
FROM sys.tables;
Можете също да върнете схемата, ако желаете:
SELECT
SCHEMA_NAME(schema_id) AS schema_name,
name AS table_name
FROM sys.tables;
Тук използвах SCHEMA_NAME()
функция за превеждане на стойността на schema_id
колона в действителното име на схемата.
Опция 2 – sys.objects
Можете също да използвате sys.objects
изглед на системния каталог. Ако изберете тази опция, можете да я филтрирате по тип, така че да се връщат само потребителски таблици:
SELECT name
FROM sys.objects
WHERE type = 'U';
Това връща потребителски таблици от текущата база данни. Този изглед също съдържа schema_id
колона, така че можете да използвате SCHEMA_NAME()
функция, за да преведе това в името на схемата, ако е необходимо.
Опция 3 – information_schema.tables
INFORMATION_SCHEMA.TABLES
view връща един ред за всяка таблица или изглед в текущата база данни, за които текущият потребител има разрешения.
Можем да филтрираме този изглед по тип, така че да се връщат само основни таблици:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';
TABLE_SCHEMA
колоната съдържа името на схемата на таблицата и затова не е необходимо да използваме SCHEMA_NAME()
функция за преобразуване на идентификатора на схемата в нейното име.
Опция 4 – sp_tables
sp_tables
Съхранената процедура връща списък с обекти, които могат да бъдат заявени в текущата среда. Това означава всяка таблица или изглед, с изключение на синонимни обекти.
Най-бързият и лесен начин да извикате тази процедура е така:
sp_tables;
Но това може да върне дълъг списък с обекти.
Обикновено е по-добре да бъдете по-конкретни. Например:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'KrankyKranes',
@table_type = "'TABLE'";
Тук казвам процедурата да показва потребителски таблици в KrankyKranes
база данни, които са собственост на dbo
.
@table_type
аргумент приема разделен със запетая списък със стойности. Така че, ако искаме да включим изгледи, можем да направим следното:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'Music',
@table_type = "'TABLE', 'VIEW'";
Опция 5 – dbo.sysobjects
Преди SQL Server 2005, dbo.sysobjects
view беше изгледът за показване на таблици и други обекти.
Така че, ако използвате старо издание на SQL Server, можете да направите това:
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U';