Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Връщане на списък с таблици и изгледи в SQL Server с помощта на T-SQL (sp_tables)

В 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)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да преименувате име на таблица в SQL Server

  2. Грешка при потвърждение на ръкостискане преди влизане в SQL Server

  3. Не може да се разреши конфликтът на съпоставяне между SQL_Latin1_General_CP1_CI_AS и Latin1_General_CI_AS в операция равна на

  4. Дата на обработка в SQL Server

  5. Как да коригирате:JSON_VALUE връща NULL с дълги низове (SQL сървър)