Найти все таблицы, содержащие столбец с указанным именем
Проблема: Поиск имен таблиц с определенными столбцами в SQL
Я пытаюсь выполнить запрос, который позволит мне получить имена таблиц, содержащих столбцы, соответствующие условию LIKE '%myName%'
. Я использую SQL и хочу узнать, как можно осуществить такой поиск.
В частности, интересует, возможно ли использовать метаданные базы данных для поиска таблиц по именам столбцов или нужно применять другой подход? Если могут быть приведены примеры запросов, которые успешно решают эту задачу, буду очень признателен.
Заранее спасибо за помощь!
5 ответ(ов)
Вы можете использовать следующий SQL-запрос для поиска столбцов по имени в таблицах SQL Server:
Поиск в таблицах:
SELECT c.name AS 'ColumnName'
,(SCHEMA_NAME(t.schema_id) + '.' + t.name) AS 'TableName'
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%MyName%'
ORDER BY TableName
,ColumnName;
Этот запрос ищет все столбцы в таблицах, где имя столбца содержит 'MyName'. Он объединяет таблицы sys.columns
и sys.tables
, чтобы получить нужные названия столбцов и таблиц, сортируя результаты по имени таблицы и имени столбца.
Поиск в таблицах и представлениях:
SELECT COLUMN_NAME AS 'ColumnName'
,TABLE_NAME AS 'TableName'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%MyName%'
ORDER BY TableName
,ColumnName;
Если вам нужно проверить также представления, вы можете воспользоваться отображением INFORMATION_SCHEMA.COLUMNS
. Этот запрос вернет имена всех столбцов во всех таблицах и представлениях, которые содержат 'MyName' в своем названии. Результаты также сортируются по имени таблицы и имени столбца.
Эти SQL-запросы удобны для поиска нужной информации в вашей базе данных, особенно если вы не уверены, в каких именно объектах (таблицах или представлениях) содержится интересующий вас столбец.
Вы также можете использовать следующую синтаксис:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%clientid%'
ORDER BY TABLE_NAME
Этот запрос позволяет вам получить все колонки из схемы информации, названия которых содержат 'clientid'. Результаты будут отсортированы по имени таблицы.
Если вам нужно найти все экземпляры имени столбца в определённой базе данных (или схеме) в SQL Server и Oracle, вы можете воспользоваться следующими запросами:
SQL Server:
SELECT Table_Name, Column_Name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'YOUR_DATABASE'
AND COLUMN_NAME LIKE '%YOUR_COLUMN%'
Этот запрос извлекает имена таблиц и столбцов из схемы информации, фильтруя по имени базы данных и имени столбца.
Oracle:
SELECT owner, table_name, column_name
FROM all_tab_columns
WHERE column_name LIKE '%YOUR_COLUMN_NAME%'
AND OWNER IN ('YOUR_SCHEMA_NAME');
В этом запросе вы ищете все столбцы с заданным именем в определенной схеме, а также указываете владельца.
- Просто как дважды два!! (SQL, PL/SQL)
Я использую это ЗАВСЕГДА, чтобы найти все экземпляры имени столбца в нужной базе данных (схеме).
Это должно сработать:
SELECT name
FROM sysobjects
WHERE id IN ( SELECT id
FROM syscolumns
WHERE name LIKE '%column_name%' )
Данный запрос выбирает имена объектов (например, таблиц) из системного представления sysobjects
, где идентификаторы этих объектов соответствуют идентификаторам колонок из представления syscolumns
, имя которых содержит подстроку column_name
. Не забудьте заменить column_name
на нужное вам значение.
Данный SQL-запрос предоставляет вам дополнительную информацию о схемах, таблицах и столбцах в вашей базе данных. Вы можете добавить дополнительные условия в секцию WHERE
для фильтрации результатов. Например, если вам нужно отобразить только те столбцы, которые не могут содержать NULL
значения, добавьте следующее условие:
and c.is_nullable = 0
Вы также можете использовать другие условия. Я представил столбцы в секции SELECT
в вертикальном формате, чтобы упростить их переупорядочивание, удаление, переименование или добавление новых столбцов в зависимости от ваших потребностей. В качестве альтернативы, вы можете искать только таблицы, используя t.name
. Запрос достаточно универсален и настраиваем.
Наслаждайтесь!
"Вставка результатов хранимой процедуры в временную таблицу"
Как экранировать одинарную кавычку в SQL Server?
Как выполнить оператор UPDATE с JOIN в SQL Server?
Функция против Хранимой процедуры в SQL Server
Следует ли мне использовать != или <> для обозначения "не равно" в T-SQL?