В SQL Server можете да използвате sp_tables
системна съхранена процедура, за да получите списък с таблици и изгледи в текущата среда.
Можете да върнете всички таблици и изгледи или можете да го стесните до конкретен собственик, тип, модел или дори конкретна таблица или изглед.
Синтаксис
Синтаксисът е така:
sp_tables [ [ @table_name = ] 'name' ] [ , [ @table_owner = ] 'owner' ] [ , [ @table_qualifier = ] 'qualifier' ] [ , [ @table_type = ] "type" ] [ , [@fUsePattern = ] 'fUsePattern'];
Всички аргументи са незадължителни.
Пример 1 – Без аргументи
Можете да изпълните тази съхранена процедура без никакви аргументи. Това ще върне всички таблици и изгледи в текущата среда.
Като това:
EXEC sp_tables;
Това връща над 500 реда в моята система, така че няма да предоставя резултатите тук. Освен че връща дефинирани от потребителя таблици и изгледи, той връща и системни обекти, като sys
и INFORMATION_SCHEMA
таблици и изгледи.
Пример 2 – Всички аргументи
В другата крайност, ето пример, който включва всички аргументи. Това стеснява резултатите до конкретно име на таблица, конкретен тип, конкретен квалификатор и конкретен собственик.
EXEC sp_tables @table_name = 'Customers', @table_owner = 'Sales', @table_qualifier = 'WideWorldImporters', @table_type = "'TABLE'", @fUsePattern = 1;
Резултат:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Пример 3 – Връщане на конкретна таблица
По-лесен начин да върнете конкретна таблица е просто да използвате първия аргумент.
Като това:
EXEC sp_tables @table_name = 'Customers';
Или още по-накратко, като едно от тези:
EXEC sp_tables 'Customers'; sp_tables 'Customers';
Въпреки това, имайте предвид, че можете да получите повече от един ред. В този пример се връщат два реда:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | | WideWorldImporters | Website | Customers | VIEW | NULL | +--------------------+---------------+--------------+--------------+-----------+
Първият ред е за таблица, а вторият е за изглед.
Ако не се интересувах от изгледи или системни таблици, бих могъл да добавя още един аргумент, за да уточня типа на таблицата.
Пример 4 – Връщане на конкретен тип таблица
Тук прецизирам предишния пример, като посочвам само типа таблица, който ме интересува, заедно с името на таблицата.
EXEC sp_tables @table_name = 'Customers', @table_type = "'TABLE'";
Резултат:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Приемливите типове включват VIEW
, TABLE
и SYSTEMTABLE
.
Имайте предвид, че типовете таблици трябва да са с главни букви.
Пример 5 – Връщане на няколко типа таблици
Може би сте забелязали, че синтаксисът за типа таблица използва единични кавички и двойни кавички. Това е така, защото приема разделен със запетая списък с типове таблици. Целият списък е затворен в двойни кавички, а всеки елемент от списъка е затворен в единични кавички със запетая, разделяща всеки елемент.
Ето пример за връщане на типове таблици TABLE
и VIEW
.
EXEC sp_tables @table_type = "'TABLE','VIEW'";
Имайте предвид, че ако SET QUOTED_IDENTIFIER
е ON
, всеки единичен знак в кавички трябва да бъде удвоен и целият параметър трябва да бъде затворен в единични кавички.
Пример 6 – Бележка относно аргумента на квалификатора на таблица
Ако използвате @table_qualifier
аргумент, стойността му трябва да е същата като текущата среда, в противен случай ще получите грешка. В SQL Server квалификаторът на таблицата представлява името на базата данни. В някои продукти той представлява името на сървъра на средата на базата данни на таблицата.
Ето какво се случва в SQL Server, ако използвам стойност, която е различна от текущата база данни:
USE Music; EXEC sp_tables @table_qualifier = 'WideWorldImporters';
Резултат:
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.
Пример 7 – заместващи знаци
Можете да използвате @fUsePattern
аргумент, за да укажете дали долната черта ( _
), процент ( %
) и скоба ( [
или ]
) символите се интерпретират като заместващи знаци. Валидни стойности са 0
(съвпадението на шаблона е изключено) и 1
(съвпадението на шаблона е включено). Стойността по подразбиране е 1
.
Ето пример за използване на съвпадение на шаблони за връщане на имена на таблици, които започват с буквата „A“:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 1;
Резултат:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | Music | dbo | Albums | TABLE | NULL | | Music | dbo | Artists | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
Но ето какво се случва, ако деактивирам съвпадението на шаблони:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 0;
Резултат:
(0 rows affected)