SQL Server. Поиск по всем таблицам и колонкам в Базе Данных

Есть несколько способов произвести поиск по БД, когда мы не понимаем где нам нужно искать:

  1. Подумать как могут называться нужные нам таблицы и произвести поиск по названиям таблиц, после чего поискать там
  2. Поиска можно не только по таблицам, но и по колонкам
  3. Два предыдущих способа не дают 100% результата, поэтому предлагаю вам рассмотреть ещё один. Этот способ даёт больше шансов найти то что мы ищем, но он значительно дольше и тратит ресурсы нашего сервера.
  4. Можно воспользоваться плагином для SSMS — ApexSQL Search

Рассмотрим 3-ий способ подробнее. Суть заключается в том, чтобы произвести поиск по всем таблицам и колонкам в Базе Данных. Чтобы скриптом было удобно пользоваться, мы обернём его в процедуру SearchAllTables, которая ищет по всем колонкам типа char, varchar, nchar, nvarchar по всей БД (системные таблицы исключены из поиска)

Вывод этой процедуры состоит из 2х колонок:

  1. Имя таблица и колонки, в которой были найдены совпадения
  2. Текст, в котором были найдены совпадения (будут отображены только первые 3630 символов)

Будьте осторожны, на больших Базах Данных скрипт может работать очень долго (часы). Так что запуская его на больших БД, будьте готовы ждать.

Создайте процедуру в той БД, в которой необходимо произвести поиск:

Вызов процедуры выглядит так:

 

Так же есть очень похожий вариант этого скрипта через другие представления. На этот раз мы обойдёмся без процедур. Строку поиска необходимо указать в @SearchText :

 

Интересная, но более сложная, реализация поиска (проверено только на SQL Server 2014)

Вырезка из статей:

  1. How to search all columns of all tables in a database for a keyword?
  2. How to quickly search for SQL database data and objects
Запись опубликована в рубрике Полезно и интересно с метками . Добавьте в закладки постоянную ссылку.

2 комментария на «SQL Server. Поиск по всем таблицам и колонкам в Базе Данных»

  1. Вадим Павлов говорит:

    Пытаюсь искать в ApexSQL Search по русским словам, но возвращает всегда ноль.
    По английским словам все ОК.
    NLS_LANG установлен в AMERICAN_CIS.CL8MSWIN1251, ищу в MSSQL2012.
    Помогите, пжл.

Добавить комментарий

Войти с помощью: