2009-10-23 1 views
0

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

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

+0

Можете ли вы предоставить более подробную информацию о строчном поиске - что вы пробовали и чего вы ожидаете в результате? –

ответ

1

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

SELECT * 
FROM information_schema.Tables 

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

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

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

0

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

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

0

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

2
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%' 
Смежные вопросы