Как получить список всех таблиц в базе данных с помощью 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. Давайте сейчас с помощью этого представления выведем список таблиц, а также получим дополнительные сведения о дате создания таблицы и дате последнего редактирования этой таблицы.
Получаем список всех таблиц с помощью системной процедуры
Еще одним способом получения списка таблиц в базе данных Microsoft SQL Server является использование системной процедуры sp_Tables, но, на мой взгляд, данный способ менее удобный, к тому же он возвращает также немного сведений, по сути, только название таблиц.
Для того чтобы получить сведения о таблицах в БД нам нужно указать параметр @table_type со значением 'TABLE', так как данная процедура возвращает еще данные о представлениях и системных таблицах. Следует обратить внимание на то, что значение параметра нужно заключать в двойные кавычки, а каждое значение типа в одиночные кавычки, так как через запятую возможно указывать несколько типов (например, для того чтобы получить таблицы и представления, в значение параметра нужно указать - "'TABLE', 'VIEW'"). Также мы укажем параметр @table_owner, для того чтобы ограничиться одним владельцем.
Вот мы с Вами и рассмотрели три возможности получения списка таблиц в 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' )Ниже приведен список других типов объектов, которые вы можете искать:
- 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: расширенная хранимая процедура
Недостатком 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
- и др.
Эта ссылка может предоставить гораздо больше информации об этом тема
ответ дан 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
источник поделиться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.nameMS 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_tablesUSER_TABLES описывает реляционные таблицы, принадлежащие текущему пользователю. В этом представлении не отображается столбец OWNER .
SELECT table_name FROM user_tablescode-examples.net