Найти конкретную запись столбца в неизвестной таблице базы данных?

Мне известно об этой теме ( Найти определенный столбец в неизвестной таблице базы данных?), и моя проблема очень похожа. Запрос, который мне нужен, очень похож на этот (я думаю):

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name LIKE '%watcher%'

Но мне нужен запрос, в котором имя столбца неизвестно, но я знаю, каким будет содержимое, и я хочу узнать, каково имя таблицы/столбца. (Я знаю, это звучит странно :-/). Я это возможно?


person Hal    schedule 28.04.2011    source источник
comment
Какая СУБД? Для фактического поиска всех столбцов/всех символьных столбцов в зависимости от строки поиска потребуется динамический SQL.   -  person Martin Smith    schedule 28.04.2011
comment
Это будет сложный процесс, вам придется делать запрос для каждого столбца каждой таблицы в вашей базе данных. Можете ли вы хотя бы ограничить тип данных, которые вы хотите найти?   -  person Lamak    schedule 28.04.2011
comment
Да, тип данных всегда varchar (по крайней мере, кажется, что это так).   -  person Hal    schedule 28.04.2011


Ответы (5)


Попробуйте использовать Поиск ApexSQL — он ищет как объекты, так и данные, и это бесплатный инструмент, похожий на поиск SQL от Red Gate.

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

person Timothy Walden    schedule 29.04.2013


Взгляните на БЕСПЛАТНЫЙ инструмент Red-Gate под названием SQL Search, который делает это - он ищет во всей вашей базе данных любые строки.

введите здесь описание изображения

введите здесь описание изображения

Это незаменимый инструмент для любого администратора баз данных или разработчика баз данных. Я уже упоминал, что его можно использовать абсолютно БЕСПЛАТНО для любых целей??

person marc_s    schedule 28.04.2011
comment
SQL Search тоже ищет данные по таблицам? - person Lamak; 28.04.2011
comment
@Lamak (понимая, что это очень старый комментарий): Нет, к сожалению, он ищет только имена объектов базы данных (столбцы, ключи, ограничения и т. д.). Он по-прежнему отвечает на вопрос ИМХО и очень прост в использовании. - person Sune Rievers; 24.02.2014

Используя SQL Workbench/J, вы можете выполнить следующую инструкцию:

WbGrepData -searchValue=watcher

он будет искать во всех столбцах во всех (доступных) таблицах и возвращать все строки, в которых искомый термин встречается хотя бы в одном столбце.

person a_horse_with_no_name    schedule 28.04.2011

Это тоже может помочь

DECLARE @columnName as varchar(100)
SET @columnName = 'ColumnName'

SELECT t.name AS Table, c.name AS Column,
ty.name AS Tipo, c.max_length AS Length
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
INNER JOIN sys.types ty ON c.system_type_id = ty.system_type_id
WHERE c.name LIKE @columnName
ORDER BY t.name, c.name
person Mauro Bilotti    schedule 14.03.2014