Поиск строки во всех таблицах базы данных SQL Server
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для того чтобы найти строку во всех таблицах базы данных SQL Server, можно использовать динамический SQL-скрипт. Этот скрипт пройдёт по каждой таблице и столбцу. Эффективность его работы достигается за счёт использования информации из INFORMATION_SCHEMA и оптимизации поиска, которая сосредоточена на текстовых данных:
DECLARE @SearchStr nvarchar(100) = N'ИскомаяСтрока';
DECLARE @Results TABLE (TableName nvarchar(128), ColumnName nvarchar(128), ColumnValue nvarchar(4000));
SET NOCOUNT ON;
DECLARE @Cursor CURSOR FOR
SELECT t.TABLE_NAME, c.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLES t
JOIN INFORMATION_SCHEMA.COLUMNS c ON t.TABLE_NAME = c.TABLE_NAME
WHERE t.TABLE_TYPE = 'BASE TABLE' AND c.DATA_TYPE IN ('char', 'nchar', 'varchar', 'nvarchar', 'text', 'ntext');
OPEN @Cursor;
FETCH NEXT FROM @Cursor INTO @TableName, @ColumnName;
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC('INSERT INTO @Results (TableName, ColumnName, ColumnValue)
SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 4000)
FROM ' + @TableName + ' (NOLOCK)
WHERE ' + @ColumnName + ' LIKE ''%' + @SearchStr + '%''');
FETCH NEXT FROM @Cursor INTO @TableName, @ColumnName;
END;
CLOSE @Cursor;
DEALLOCATE @Cursor;
SELECT * FROM @Results;
Замените 'ИскомаяСтрока'
на текст, который нужно найти, выполните скрипт и проверьте результаты в @Results
.
Углубляемся: оптимизация и безопасность поиска
Ускорение работы благодаря выборочному просмотру баз данных
Чтобы ускорить процесс поиска, ограничьте его определёнными базами данных с использованием оператора USE.
Безопасность динамического SQL
Функция QUOTENAME поможет корректно экранировать элементы динамического запроса и обезопасит систему от SQL-инъекций.
Улучшение производительности с помощью NOLOCK
Применение подсказки NOLOCK при чтении данных снижает нагрузку на таблицы, допуская при этом появление грязных чтений.
Работа с большими базами данных
Большие базы данных требуют разбиения задачи на части или ограничения длины обрабатываемых строк с целью оптимизации производительности и предотвращения выполнения тяжёлых запросов.
Визуализация
Процесс работы системы поиска можно представить как поход по разделам библиотеки (таблицам) в поисках нужной книги (строки).
🏥 Библиотека Базы Данных 🏥
| Раздел (Таблица) | Статус 🕵️♂️ |
| ----------------- | ---------------- |
| Художественная литература | Проверено |
| Научно-популярная литература | Проверено |
| Руководства и справочники | Проверено |
| Энциклопедии | Найдено! |
Использование встроенных возможностей SQL Server
Использование системных представлений
Системные представления, такие как sys.objects
и sys.schemas
, позволяют ограничить поиск до пользовательских таблиц.
Адаптация под типы данных
Необходимо отфильтровать столбцы по их типам для того чтобы не тратить ресурсы на поиск в численных данных, которые не могут содержать текст.
Проверка результатов
@Results
позволит убедиться в точности и полноте результатов поиска.
Продвинутые советы
Поиск с помощью сторонних инструментов
Есть инструменты от сторонних разработчиков, такие как ApexSQL Search, которые были созданы для упрощения процесса поиска.
Совместимость с версией SQL Server
Обязательно проверьте поддержку табличных переменных и других используемых элементов скрипта на вашем SQL Server.
Исполнение динамического SQL
Для обеспечения дополнительной безопасности используйте инструкцию sp_executesql при работе с динамическим SQL.
Освобождение ресурсов
Как и любые ресурсы, требующие значительных затрат, курсоры необходимо закрывать и освобождать после окончания их использования.
Полезные материалы
- Поиск во всех таблицах базы данных SQL Server.
- Подробное руководство по динамическому SQL для поиска информации в базе данных.
- Улучшение надёжности и гибкости системных хранимых процедур.
- Превращение SQL-запросов в мощный инструмент для извлечения данных из базы данных.
- Общее руководство по обнаружению информации в SQL Server.
- Оптимизация структуры таблиц в InnoDB для MySQL.