SQL Super Search - PullRequest
       8

SQL Super Search

1 голос
/ 10 октября 2009

Есть ли у кого-нибудь хороший метод для поиска во всей базе данных по заданному значению? У меня есть конкретная строка, которую я ищу, она находится в TableA, и это также FK для другой таблицы, TableB, за исключением того, что я не знаю, какая это таблица / столбец.

Если предположить, что есть миллионы таблиц, и я не хочу просматривать их все, и, возможно, придется сделать это в нескольких разных случаях, что будет лучшим способом?

Так как я не хотел мост Code-SQL, моя единственная полностью SQL-идея была:

select tablename and column_name from INFORMATION_SCHEMA.COLUMNS

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

SELECT * from @table where @column =  @myvalue

Излишне говорить, что это медленно И боров памяти.

У кого-нибудь есть идеи?

Ответы [ 5 ]

6 голосов
/ 10 октября 2009

Дамп базы данных и grep?

Полагаю, более сфокусированный вопрос: если вы не знаете, как работает схема, что вы будете делать с тем или иным ответом, который вы получите?

3 голосов
/ 10 октября 2009

Вот несколько ссылок, говорящих о том, как это сделать:

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

2 голосов
/ 10 октября 2009

Вот решение, которое я написал несколько лет назад: http://www.users.drew.edu/skass/sql/SearchAllTables.sql.txt

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

чтобы сбросить ваши данные, прочтите утилиту bcp

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

Просто сделайте SP, который ищет во всех соответствующих столбцах, используя OR.

Почему вы не знаете, по каким столбцам искать?

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

Если список столбцов слишком большой для того, чтобы вы могли набрать его в SP, используйте элементарный perl / grep / whatnot, чтобы сделать это в 1 строку, например, для SYBASE.

my_dump_table_schema.pl|egrep "( CHAR| VARCHAR)"|awk '{$1}'|tr "\012" " "|perl -pe '{s/ / = \@SEARCH_VALUE OR /g}'; echo ' = @SEARCH_VALUE'

Последнее эхо необходимо для добавления значения в последний столбец

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