В SQL Server можете да използвате sp_tables_ex
системна съхранена процедура за връщане на информация за таблицата за таблиците от определен свързан сървър.
Най-простият начин да изпълните тази съхранена процедура е да предадете името на свързания сървър. Това ще върне всички таблици от базата данни по подразбиране на посочения свързан сървър, включително системни таблици и изгледи. Това може да е голям списък.
Също така имате възможност да посочите различна база данни и/или конкретна схема на таблица. Можете също да филтрирате резултатите въз основа на типа таблица (напр. таблица, изглед, системна таблица и т.н.).
Синтаксис
Синтаксисът е така:
sp_tables_ex [ @table_server = ] 'table_server' [ , [ @table_name = ] 'table_name' ] [ , [ @table_schema = ] 'table_schema' ] [ , [ @table_catalog = ] 'table_catalog' ] [ , [ @table_type = ] 'table_type' ] [ , [@fUsePattern = ] 'fUsePattern' ]
@table_server
аргументът е единственият задължителен аргумент. Това е името на свързания сървър, от който искате информацията за таблицата.
Другите аргументи са незадължителни и ги обхващам в следващите примери. За повече информация относно тези аргументи вижте документацията на Microsoft.
Пример 1 – Връщане на всички таблици
Следният пример връща всички таблици, изгледи, системни таблици, псевдоними и т.н. от базата данни по подразбиране на свързания сървър, наречен Homer.
EXEC sp_tables_ex 'Homer';
Това връща стотици редове в моята система, така че няма да изброявам резултатите в този пример. Имайте предвид, че повечето от тези редове са системни таблици и системни изгледи.
Това може да се направи и по следния начин:
EXEC sp_tables_ex @table_server = 'Homer';
Пример 2 – Посочете различна база данни
Следният пример указва, че WideWorldImportersDW
база данни трябва да се използва.
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW';
Отново, това връща стотици редове, така че няма да изброявам резултатите.
Пример 3 – Връщане на конкретна таблица
В този пример връщам информация за конкретна таблица.
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'Music', @table_name = 'Artists';
Резултати:
+-------------+---------------+--------------+--------------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------+---------------+--------------+--------------+-----------| | Music | dbo | Artists | TABLE | NULL | +-------------+---------------+--------------+--------------+-----------+
Пример 4 – Само връщане на изгледи
В този пример уточнявам, че трябва да се връщат само изгледи.
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'Music', @table_type = 'VIEW';
Резултати:
+-------------+---------------+--------------+--------------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------+---------------+--------------+--------------+-----------| | Music | dbo | BluesAlbums | VIEW | NULL | | Music | dbo | JazzAlbums | VIEW | NULL | | Music | dbo | RockAlbums | VIEW | NULL | +-------------+---------------+--------------+--------------+-----------+
Имайте предвид, че те не включват системни изгледи. Ако исках да върна системни изгледи, щях да използвам @table_type = 'SYSTEM VIEW'
(и резултатният набор би бил много по-голям).
@table_type
аргументът приема следните типове:ALIAS
, GLOBAL TEMPORARY
, LOCAL TEMPORARY
, SYNONYM
, SYSTEM TABLE
, SYSTEM VIEW
, TABLE
и VIEW
.
Пример 5 – Посочете схема на таблица
Следният пример стеснява резултатите до конкретна схема на таблица (Dimension
) в WideWorldImportersDW
база данни.
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW', @table_schema = 'Dimension';
Резултати:
+----------------------+---------------+------------------+--------------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | |----------------------+---------------+------------------+--------------+-----------| | WideWorldImportersDW | Dimension | City | TABLE | NULL | | WideWorldImportersDW | Dimension | Customer | TABLE | NULL | | WideWorldImportersDW | Dimension | Date | TABLE | NULL | | WideWorldImportersDW | Dimension | Employee | TABLE | NULL | | WideWorldImportersDW | Dimension | Payment Method | TABLE | NULL | | WideWorldImportersDW | Dimension | Stock Item | TABLE | NULL | | WideWorldImportersDW | Dimension | Supplier | TABLE | NULL | | WideWorldImportersDW | Dimension | Transaction Type | TABLE | NULL | +----------------------+---------------+------------------+--------------+-----------+
Пример 6 – заместващи знаци
@fUsePattern
аргумент ви позволява да укажете дали %
, _
, [
и ]
знаците се интерпретират като заместващи знаци.
Стойността по подразбиране е 1
, което означава, че те са интерпретирани като заместващи знаци. Можете да посочите 0
за да уточните, че не да се тълкува като заместващи знаци.
Ето пример за използване на заместващ знак:
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW', @table_name = 'C%', @table_type = 'TABLE', @fUsePattern = 1;
Резултати:
+----------------------+---------------+------------------+--------------+-----------+ | TABLE_CAT | TABLE_SCHEM | TABLE_NAME | TABLE_TYPE | REMARKS | |----------------------+---------------+------------------+--------------+-----------| | WideWorldImportersDW | Dimension | City | TABLE | NULL | | WideWorldImportersDW | Dimension | Customer | TABLE | NULL | | WideWorldImportersDW | Integration | City_Staging | TABLE | NULL | | WideWorldImportersDW | Integration | Customer_Staging | TABLE | NULL | +----------------------+---------------+------------------+--------------+-----------+
И ето какво се случва, ако не задам никакви заместващи знаци:
EXEC sp_tables_ex @table_server = 'Homer', @table_catalog = 'WideWorldImportersDW', @table_name = 'C%', @table_type = 'TABLE', @fUsePattern = 0;
Резултати:
(0 rows affected) Time: 0.324s