SQL Server: необходимо найти источник определенного строкового значения - PullRequest
0 голосов
/ 23 октября 2009

Есть ли способ поиска определенного строкового значения в базе данных SQL SERVER 2005? У меня есть это значение пути к изображению, которое я хочу изменить, и я думаю, что оно хранится в базе данных.

Кроме того, есть ли способ найти имя столбца для любой таблицы в базе данных? Аналогично, поиск имени таблицы в базе данных?

Ответы [ 4 ]

2 голосов
/ 06 декабря 2012
SELECT B.*
FROM information_schema.COLUMNS B
WHERE table_name 
      IN (SELECT A.TABLE_NAME FROM information_schema.Tables A WHERE TABLE_TYPE='BASE TABLE')
      AND B.COLUMN_NAME LIKE '%yoursearchstring%'
1 голос
/ 23 октября 2009

Используйте это, чтобы получить список всех таблиц в базе данных.

SELECT *
FROM information_schema.Tables

Используйте это, чтобы получить список всех столбцов в таблице

SELECT column_name 'Column Name'
FROM information_schema.columns
WHERE table_name = MyTableName

Вы можете использовать их вместе для поиска по каждой таблице и столбцу для поиска вашей строки.

0 голосов
/ 24 октября 2009

Иногда люди делают это с помощью динамического sql для поиска по каждому столбцу в базе данных. Он не будет работать так хорошо, но для такого одноразового поиска это может быть очень удобно. Быстрый поиск в Google нашел этот пример - http://codesnippets.joyent.com/posts/show/2157 Это довольно плохой пример, поскольку он запрашивает каждую таблицу N раз, где N - это число столбцов (он должен просто выполнить одно сканирование таблицы вместо N), но он может выполнить свою работу. Вы также можете не ограничивать первые 100 символов, как в этом примере.

0 голосов
/ 23 октября 2009

Могут существовать утилиты, которые детализируют каталог / схему данного сервера / базы данных и используют эту информацию для поиска данного совпадения (или частичного совпадения) с данным шаблоном во всех текстоподобных столбцах. Вы могли бы даже написать такую ​​утилиту и представить собственную эвристику (скажем, не искать таблицы, в которых более 10000 строк, потому что вы ожидаете, что информация будет таблицей типа конфигурации и т. Д.)

Более простым способом может быть использование SQL-Profiler для записи каждого запроса, отправленного на сервер (возможно, отфильтрованного по IP-адресу, идентификатору сеанса и т. Д.). Затем, запустив базовое приложение, чтобы оно генерировало конкретную строку, вы получите [надеюсь] короткий список запросов, один из которых нацелен на конкретную таблицу / столбец, откуда, следовательно, запрашивается путь / строка или части. 1003 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...