Как получить список всех таблиц в базе данных с помощью TSQL? Список sql таблиц


Как получить список всех таблиц в базе данных Microsoft SQL Server? | Info-Comp.ru

Если у Вас встала задача определить количество таблиц в базе данных Microsoft SQL Server, то данная статья Вам поможет, так как в ней мы рассмотрим несколько способов реализации того, как можно получить список всех пользовательских таблиц, включая некоторые их характеристики с помощью SQL запроса.

Всю информацию о таблицах и других объектах SQL сервера можно посмотреть в графической среде SQL Server Management Studio, но иногда требуется выгрузить данную информацию или просто получить к ней доступ, для того чтобы использовать ее, например, в своих SQL инструкциях, это можно сделать несколькими способами, и сейчас мы их рассмотрим.

Примечание! Примеры рассматривать мы будем в СУБД Microsoft SQL Server 2016 Express.

Получаем список всех таблиц с помощью представления информационной схемы

В Microsoft SQL Server есть специальная схема, предназначенная для получения информации о метаданных - это INFORMATION_SCHEMA. Подробно о ней мы говорили в материале – «Представления информационной схемы Microsoft SQL Server».

Для того чтобы получить информацию о таблицах в БД, существует представление информационной схемы TABLES. Допустим, нам нужно получить просто перечень таблиц, для этого пишем следующий SQL запрос (в моей тестовой базе всего одна таблица).

SELECT TABLE_NAME AS [Название таблицы] FROM INFORMATION_SCHEMA.TABLES WHERE table_type='BASE TABLE'

В данном случае мы указали условие table_type='BASE TABLE', так как данное представление содержит еще и информацию о представлениях (VIEW).

Недостатком данного способа является то, что никакой больше полезной информации в представлении INFORMATION_SCHEMA.TABLES нет.

Получаем список всех таблиц с помощью системного представления sys.tables

Альтернативным способом и более удачным, если Вам нужна дополнительная информация о таблицах, является способ с использованием системного представления sys.tables. Давайте сейчас с помощью этого представления выведем список таблиц, а также получим дополнительные сведения о дате создания таблицы и дате последнего редактирования этой таблицы.

SELECT name AS [Название таблицы], create_date AS [Дата создания], modify_date AS [Дата редактирования] FROM sys.tables

Получаем список всех таблиц с помощью системной процедуры

Еще одним способом получения списка таблиц в базе данных Microsoft SQL Server является использование системной процедуры sp_Tables, но, на мой взгляд, данный способ менее удобный, к тому же он возвращает также немного сведений, по сути, только название таблиц.

Для того чтобы получить сведения о таблицах в БД нам нужно указать параметр @table_type со значением 'TABLE', так как данная процедура возвращает еще данные о представлениях и системных таблицах. Следует обратить внимание на то, что значение параметра нужно заключать в двойные кавычки, а каждое значение типа в одиночные кавычки, так как через запятую возможно указывать несколько типов (например, для того чтобы получить таблицы и представления, в значение параметра нужно указать - "'TABLE', 'VIEW'"). Также мы укажем параметр @table_owner, для того чтобы ограничиться одним владельцем.

EXEC sp_Tables @table_owner = 'dbo', @table_type = "'TABLE'";

Вот мы с Вами и рассмотрели три возможности получения списка таблиц в Microsoft SQL Server, в своей книге «Путь программиста T-SQL. Самоучитель по языку Transact-SQL» я подробно рассказываю практически про все конструкции языка Transact-SQL, у меня все, пока!

Похожие статьи:

info-comp.ru

sql-server - Как получить список всех таблиц в базе данных с помощью TSQL?

Каков наилучший способ получить имена всех таблиц в конкретной базе данных на SQL Server?

задан Ray Vega 06 окт. '08 в 20:53 источник поделиться

SQL Server 2005, 2008, 2012, 2014 или 2016:

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

Показать только таблицы из конкретной базы данных

SELECT TABLE_NAME FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'

Или

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='dbName' --(for MySql, use: TABLE_SCHEMA='dbName' )

PS: для SQL Server 2000:

SELECT * FROM sysobjects WHERE xtype='U' источник поделиться SELECT sobjects.name FROM sysobjects sobjects WHERE sobjects.xtype = 'U'

Ниже приведен список других типов объектов, которые вы можете искать:

  • AF: функция агрегации (CLR)
  • C: ограничение CHECK
  • D: ограничение по умолчанию или DEFAULT
  • F: ограничение FOREIGN KEY
  • L: Журнал
  • FN: Скалярная функция
  • FS: Склассическая (CLR) скалярная функция
  • Функция таблицы FT: сборка (CLR)
  • IF: встроенная таблица-функция
  • IT: Внутренняя таблица
  • P: Сохраненная процедура
  • Сохранение хранимой процедуры ПК: сборка (CLR)
  • PK: ограничение PRIMARY KEY (тип K)
  • RF: хранимая процедура фильтра репликации
  • S: системная таблица
  • SN: синоним
  • SQ: очередь обслуживания
  • TA: Сборка (CLR) DML-триггер
  • TF: функция таблицы
  • TR: SQL DML Trigger
  • TT: Тип таблицы
  • U: Таблица пользователей
  • UQ: ограничение UNIQUE (тип K)
  • V: Просмотреть
  • X: расширенная хранимая процедура
ответ дан Micah 06 окт. '08 в 21:02 источник поделиться SELECT name FROM sysobjects WHERE xtype='U' ORDER BY name;

(стандарт SQL Server 2000, по-прежнему поддерживается в SQL Server 2005.)

ответ дан devio 06 окт. '08 в 20:55 источник поделиться

Недостатком INFORMATION_SCHEMA.TABLES является то, что он также включает в себя системные таблицы, такие как таблицы dtproperties и MSpeer_..., без возможности рассказать их отдельно от ваших собственных таблиц.

Я бы рекомендовал использовать sys.objects (новая версия устаревшего sysobjects), который поддерживает исключение системных таблиц:

select * from sys.objects where type = 'U' -- User tables and is_ms_shipped = 0 -- Exclude system tables ответ дан Astrotrain 27 сент. '17 в 15:20 источник поделиться

вы можете просто сначала выбрать свою базу данных

use database_name;

то просто введите

show tables; источник поделиться

В SSMS для получения всех полных имен таблиц в конкретной базе данных (например, "MyDatabase" ):

SELECT [TABLE_CATALOG] + '.' + [TABLE_SCHEMA] + '.' + [TABLE_NAME] FROM MyDatabase.INFORMATION_SCHEMA.Tables WHERE [TABLE_TYPE] = 'BASE TABLE' and [TABLE_NAME] <> 'sysdiagrams' ORDER BY [TABLE_SCHEMA], [TABLE_NAME]

Результаты:

  • MyDatabase.dbo.MyTable1
  • MyDatabase.dbo.MyTable2
  • MyDatabase.MySchema.MyTable3
  • MyDatabase.MySchema.MyTable4
  • и др.
источник поделиться --for oracle select tablespace_name, table_name from all_tables;

Эта ссылка может предоставить гораздо больше информации об этом тема

ответ дан Demietra95 13 нояб. '15 в 15:34 источник поделиться

Благодаря Ray Vega, чей ответ дает все пользовательские таблицы в базе данных...

exec sp_msforeachtable 'print' '?' ''

sp_helptext показывает базовый запрос, который суммируется с...

select * from dbo.sysobjects o join sys.all_objects syso on o.id = syso.object_id where OBJECTPROPERTY(o.id, 'IsUserTable') = 1 and o.category & 2 = 0 ответ дан Frank 18 авг. '17 в 1:19 источник поделиться

Пожалуйста, используйте это. Вы получите имена таблиц вместе с именами схем: -

SELECT SYSSCHEMA.NAME, SYSTABLE.NAME FROM SYS.tables SYSTABLE INNER JOIN SYS.SCHEMAS SYSSCHEMA ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID

источник поделиться

qaru.site

sql - SQL Server: возвращает список столбцов, разделяемых группой таблиц базы данных

Это приведет к именам столбцов и типам данных в указанной таблице, которые также отображаются в других таблицах, а затем список разделенных запятыми таблиц, в которых они отображаются:

SELECT COLUMN_NAME, DATA_TYPE, REPLACE(REPLACE(REPLACE( (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE (COLUMN_NAME = CommonColumns.COLUMN_NAME) AND (DATA_TYPE = CommonColumns.DATA_TYPE) FOR XML PATH('')) , '</TABLE_NAME><TABLE_NAME>', ', '), '<TABLE_NAME>', ''), '</TABLE_NAME>', '') AS Tables FROM (SELECT DISTINCT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE 'T_Blah%') AS CommonColumns WHERE (SELECT COUNT(TABLE_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE (COLUMN_NAME = CommonColumns.COLUMN_NAME) AND (DATA_TYPE = CommonColumns.DATA_TYPE)) > 1

Чтобы сделать это для всех таблиц, просто удалите WHERE TABLE_NAME LIKE 'T_Blah%'.

Или, как рекомендует Аарон, избегайте INFORMATION_SCHEMA:

SELECT ColumnName, sys.types.name AS DataType, REPLACE(REPLACE(REPLACE( (SELECT sys.tables.name AS TableName FROM sys.columns INNER JOIN sys.tables ON sys.columns.object_id = sys.tables.object_id WHERE (sys.tables.type = 'U') AND (sys.columns.name = CommonColumns.ColumnName) AND (sys.columns.system_type_id = CommonColumns.system_type_id) FOR XML PATH('')) , '</TableName><TableName>', ', '), '<TableName>', ''), '</TableName>', '') AS Tables FROM (SELECT DISTINCT sys.columns.name AS ColumnName, sys.columns.system_type_id FROM sys.columns INNER JOIN sys.tables ON sys.columns.object_id = sys.tables.object_id WHERE (sys.tables.type = 'U') AND (sys.tables.name LIKE 'T_Blah%')) AS CommonColumns INNER JOIN sys.types ON sys.types.system_type_id = CommonColumns.system_type_id WHERE ((SELECT COUNT(sys.tables.object_id) AS TableCount FROM sys.columns INNER JOIN sys.tables ON sys.columns.object_id = sys.tables.object_id WHERE (sys.tables.type = 'U') AND (sys.columns.name = CommonColumns.ColumnName) AND (sys.columns.system_type_id = CommonColumns.system_type_id)) > 1) ORDER BY CommonColumns.ColumnName, sys.types.name

Чтобы получить отношения по внешним ключам, используйте:

SELECT sys.foreign_keys.name AS ForeignKeyName, OBJECT_NAME(sys.foreign_key_columns.parent_object_id) AS ForeignKeyTableName, ForeignKeyColumns.name AS ForeignKeyColumnName, OBJECT_NAME(sys.foreign_key_columns.referenced_object_id) AS ReferencedTableName, ReferencedColumns.name AS ReferencedColumnName FROM sys.foreign_keys INNER JOIN sys.foreign_key_columns ON sys.foreign_keys.object_id = sys.foreign_key_columns.constraint_object_id INNER JOIN sys.columns AS ForeignKeyColumns ON sys.foreign_key_columns.parent_object_id = ForeignKeyColumns.object_id AND sys.foreign_key_columns.parent_column_id = ForeignKeyColumns.column_id INNER JOIN sys.columns AS ReferencedColumns ON sys.foreign_key_columns.referenced_object_id = ReferencedColumns.object_id AND sys.foreign_key_columns.referenced_column_id = ReferencedColumns.column_id WHERE (OBJECT_NAME(sys.foreign_key_columns.parent_object_id) LIKE 'T_Blah%') OR (OBJECT_NAME(sys.foreign_key_columns.referenced_object_id) LIKE 'T_Blah%')

qaru.site

MS SQL Server - как вывести список всех таблиц

При запуске компоненты администрирования MS SQL Server Managment Studio появляется ошибка: Could not load file

Администрирование

26 октября в 2 часа ночи произошел перевод часов на 1 час назад. Убедитесь, что

DBF — это формат хранения данных, который используется для хранения и передачи данных системами

VPN

Брандмауэр Windows — это встроенный файервол (firewall) Windows, который призван защищать компьютер от угроз

Администрирование

Купил домой ноутбук Lenovo IdeaPad Z500 с предустановленной Windows 8. Однако с течением времени

Что делать если нет пароля администратора SA MS SQL Server managment studio и нет

remotehelper.ru

c# - Список таблиц, используемых в SQL-запросе

вы можете использовать этот sql script сразу после вашего запроса. Он вернет список таблиц, используемых в последнем выполненном запросе:

SELECT Field1, Field2 FROM Table t JOIN OtherTable ON t.id=OtherTable.t_id ;WITH vwQueryStats AS( SELECT COALESCE(OBJECT_NAME(s2.objectid),'Ad-Hoc') AS ProcName ,execution_count ,s2.objectid ,( SELECT TOP 1 SUBSTRING(s2.TEXT,statement_start_offset / 2+1 ,( ( CASE WHEN statement_end_offset = -1 THEN (LEN(CONVERT(NVARCHAR(MAX),s2.TEXT)) * 2) ELSE statement_end_offset END)- statement_start_offset) / 2+1)) AS sql_statement ,last_execution_time FROM sys.dm_exec_query_stats AS s1 CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 ) SELECT TOP 1 * INTO #lastQueryStats FROM vwQueryStats x WHERE sql_statement NOT like 'WITH vwQueryStats AS%' ORDER BY last_execution_time DESC SELECT TABLE_NAME FROM #lastQueryStats, INFORMATION_SCHEMA.TABLES tab WHERE CHARINDEX( tab.TABLE_NAME, sql_statement) > 0 DROP TABLE #lastQueryStats

Я взял запрос, который извлекает последний выполненный запрос из этого сообщения , и я немного изменил его в соответствии с вашим примером.

Выход будет таким, как вы просили:

Table OtherTable

Затем, если вы хотите, чтобы они были разделены запятыми, вы можете:

DECLARE @tableNames VARCHAR(MAX) SELECT @tableNames = COALESCE(@tableNames + ', ', '') + TABLE_NAME FROM #lastQueryStats, INFORMATION_SCHEMA.TABLES tab WHERE CHARINDEX( tab.TABLE_NAME, sql_statement) > 0 SELECT @tableNames

Однако вы должны опасаться, что в "обычной" среде производства или QA с тысячами запросов, выполняемых одновременно, это может не работать, поскольку другой запрос может быть выполнен между вашим первым запросом и запросом, который извлекает информацию из статистики db.

Надеюсь, что это поможет

qaru.site

sql - Получить список всех таблиц в Oracle?

SELECT owner, table_name FROM dba_tables

Предполагается, что у вас есть доступ к представлению словаря данных DBA_TABLES. Если у вас нет этих привилегий, но они нуждаются в них, вы можете запросить, чтобы администратор базы данных явно предоставлял вам привилегии в этой таблице или что администратор базы данных предоставляет вам привилегию SELECT ANY DICTIONARY или SELECT_CATALOG_ROLE (любой из которых позволит вам для запроса любой таблицы словаря данных). Конечно, вы можете исключить некоторые схемы, такие как SYS и SYSTEM, которые имеют большое количество таблиц Oracle, которые вам, вероятно, не волнует.

В качестве альтернативы, если у вас нет доступа к DBA_TABLES, вы можете увидеть все таблицы, к которым ваша учетная запись имеет доступ, через представление ALL_TABLES:

SELECT owner, table_name FROM all_tables

Хотя это может быть подмножество таблиц, доступных в базе данных (ALL_TABLES показывает вам информацию для всех таблиц, которым был предоставлен ваш пользователь).

Если вас интересуют только те таблицы, которые у вас есть, а не те, к которым у вас есть доступ, вы можете использовать USER_TABLES:

SELECT table_name FROM user_tables

Так как USER_TABLES имеет только информацию о собственных таблицах, у нее нет столбца OWNER - владелец, по определению, вы.

Oracle также имеет ряд устаревших видов словарей данных - TAB, DICT, TABS и CAT например - которые могут быть использованы. В общем, я бы не предложил использовать эти устаревшие представления, если вам не нужно полностью использовать ваши сценарии для Oracle 6. Oracle не изменил эти представления за долгое время, поэтому у них часто возникают проблемы с новыми типами объектов. Например, представления TAB и CAT отображают информацию о таблицах, которые находятся в корзине пользователя, в то время как теги [DBA|ALL|USER]_TABLES все фильтруют их. CAT также показывает информацию о материализованных журналах просмотра с TABLE_TYPE в таблице "ТАБЛИЦА", которая вряд ли будет тем, что вы действительно хотите. DICT объединяет таблицы и синонимы и не говорит вам, кому принадлежит этот объект.

qaru.site

Получить список всех таблиц в Oracle? [sql]

SELECT owner, table_name FROM dba_tables

Предполагается, что у вас есть доступ к представлению DBA_TABLES данных DBA_TABLES . Если у вас нет этих привилегий, но они нуждаются в них, вы можете запросить, чтобы администратор базы данных явно предоставил вам привилегии в этой таблице или что администратор баз данных предоставляет вам привилегию SELECT ANY DICTIONARY или роль SELECT_CATALOG_ROLE (любой из которых позволит вам запрашивать любая таблица словаря данных). Конечно, вы можете исключить некоторые схемы, такие как SYS и SYSTEM которые имеют большое количество таблиц Oracle, которые вам, вероятно, не волнуют.

В качестве альтернативы, если у вас нет доступа к DBA_TABLES , вы можете увидеть все таблицы, к которым ваша учетная запись имеет доступ, через представление ALL_TABLES :

SELECT owner, table_name FROM all_tables

Хотя это может быть подмножество таблиц, доступных в базе данных ( ALL_TABLES показывает вам информацию для всех таблиц, которым был предоставлен ваш пользователь).

Если вас интересуют только те таблицы, которые у вас есть, а не те, к которым у вас есть доступ, вы можете использовать USER_TABLES :

SELECT table_name FROM user_tables

Поскольку USER_TABLES имеет только информацию о ваших собственных таблицах, у нее нет колонки OWNER - владелец, по определению, является вами.

Oracle также имеет ряд устаревших представлений словаря данных - например, TAB , DICT , TABS и CAT которые можно использовать. В общем, я бы не предложил использовать эти устаревшие представления, если вам не нужно полностью использовать ваши сценарии для Oracle 6. Oracle не изменил эти представления за долгое время, поэтому у них часто возникают проблемы с новыми типами объектов. Например, представления TAB и CAT отображают информацию о таблицах, которые находятся в [DBA|ALL|USER]_TABLES пользователя, в то время как просмотры [DBA|ALL|USER]_TABLES все фильтруют их. CAT также показывает информацию о материализованных журналах просмотра с TABLE_TYPE «ТАБЛИЦА», которая вряд ли будет тем, что вы действительно хотите. DICT объединяет таблицы и синонимы и не говорит вам, кому принадлежит этот объект.

Идя дальше, есть еще один вид, называемый cols (all_tab_columns), который может использоваться для определения того, какие таблицы содержат заданное имя столбца.

Например:

SELECT table_name, column_name FROM cols WHERE table_name LIKE 'EST%' AND column_name LIKE '%CALLREF%';

найти все таблицы, имеющие имя, начинающееся с EST, и столбцы, содержащие CALLREF в любом месте их имен.

Это может помочь при разработке тех столбцов, к которым вы хотите присоединиться, например, в зависимости от ваших соглашений об именах таблиц и столбцов.

Простой запрос для выбора таблиц для текущего пользователя:

SELECT table_name FROM user_tables;

Попробуйте просмотреть словарные данные ниже.

tabs dba_tables all_tables user_tables

С помощью любого из них вы можете выбрать:

SELECT DISTINCT OWNER, OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME'; SELECT DISTINCT OWNER, OBJECT_NAME FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

Для этого существует 3 элемента данных

DBA_TABLES описывает все реляционные таблицы в базе данных.

SELECT owner, table_name FROM dba_tables

Описание реляционных таблиц, доступных пользователю

SELECT owner, table_name FROM all_tables

USER_TABLES описывает реляционные таблицы, принадлежащие текущему пользователю. В этом представлении не отображается столбец OWNER .

SELECT table_name FROM user_tables

code-examples.net