Выполнение SQL запроса без вывода результатов на экран
Быстрый ответ
Для "тихого" выполнения SQL-запроса вам необходимо обернуть его в SET NOCOUNT ON;
и SET NOCOUNT OFF;
. Такой подход позволит подавить сообщения о количестве обработанных записей.
Пример:
SET NOCOUNT ON;
-- Вставляем ваш запрос здесь
-- Отсутствует уведомление о количестве затронутых строк, пока идёт выполнение!
INSERT INTO Table (Column) VALUES ('Data');
SET NOCOUNT OFF;
Использование этого подхода не меняет логику выполнения запросов; таким образом подавляется только вывод уведомлений о числе обработанных строк.
Эффективные способы подавления результатов
Подавление уведомлений
В случае когда отчёт о количестве обработанных записей не требуется, например, при добавлении или обновлении данных, использование SET NOCOUNT ON позволяет повысить эффективность и "тишину" операций.
Анализ планов выполнения без отображения результатов
В SQL Server Management Studio (SSMS) использование опции "Discard results after execution" позволяет получать актуальные планы выполнения запросов без привлечения внимания к выведенным результатам.
Экономия системных ресурсов
Пренебрежение выводом результатов позволяет сэкономить сетевую пропускную способность и память. Это сравнивается с поиском нужной книги в библиотеке без просмотра каждой встречной книги.
Уменьшение трафика с помощью "Discard results"
Если ваш экран перегружен множеством наборов результатов, как при дорожном заторе, использование опции "discard result after execution" в SSMS помогает "разгрузить" экран от лишней информации.
Альтернативные подходы к подавлению результатов
Проверка структуры таблицы при помощи SET FMTONLY
Ранее использование SET FMTONLY ON позволяло получить метаданные без реальных данных. Сейчас этот метод устаревший и может привести к пустым записям. Пользуйтесь им с осторожностью.
Проверка синтаксиса с помощью SET NOEXEC
Команда SET NOEXEC ON компилирует запрос и проверяет его на синтаксические ошибки без его непосредственного выполнения. Инструмент полезный для проверки корректности SQL-кода!
Операции с важными попутными эффектами
Иногда важными являются не непосредственные результаты, а побочные эффекты операций, аналогично действию медикаментов. Подавление результатов позволяет акцентировать основное внимание на побочных явлениях.
Осведомленность об изменениях: SET NOCOUNT
Умелое использование SET-команд, таких как SET NOCOUNT ON/OFF, может оказать существенное влияние на процесс, позволяя гибко настраивать вывод результатов.
Визуализация
Представьте SQL-запрос как ниндзю (🥷), который работает:
SET NOCOUNT ON;
-- Ниндзя начинает миссию
-- Здесь применяется SQL-джутсу!
SET NOCOUNT OFF;
На выполнение задачи этот ниндзя уходит незаметно (🌫️) и исчезает, не оставив после себя следов.
Начало: [📂📂📂]
Конец: [📂📂📂] // Без следов!
Идея: Ниндзя (система управления базой данных) исполняет команду, не открывая результатов.
Тонкая конфигурация выполнения команд
Роль SET-команд
Понимание функций различных SET-команд поможет разработать оптимальные стратегии для управления выводом результатов.
- SET NOCOUNT ON: Количество обработанных строк не становится важным.
- SET FMTONLY ON/OFF: Выбор идёт между возвратом реальных данных и только метаданными.
- SET NOEXEC ON/OFF: Компиляция без исполнения запроса помогает убедиться в его правильности.
Сценарии для неприметного выполнения
Не всегда нужно следить за каждым результатом выполнения запроса. Вот некоторые типичные сценарии:
- Пакетные операции: Обработка больших объёмов записей, когда мгновенный вывод результатов не обязателен.
- Миграция данных: Перенос масштабных данных, когда немедленное отображение результатов не критично.
- Наладка производительности: Тестирование системы, при котором реальные данные не важны.
Полезные материалы
- SET NOCOUNT ON для увеличения производительности хранимых процедур в SQL Server — обзор улучшения производительности SQL Server при использовании команды SET NOCOUNT.
- PostgreSQL: Документация: Контрольные структуры — документация по управлению результатами запросов в PostgreSQL, включая отбрасывание результатов.
- Вопросы — платформа Q&A от Oracle с информацией о выполнении запросов без вывода результатов с помощью SET AUTOTRACE.
- Руководство по MySQL 8.0: Опции команды mysql — описание опций для "тихого" выполнения запросов в MySQL.
- SET NOCOUNT (Transact-SQL) – SQL Server | Microsoft Learn — подробное руководство от Microsoft по использованию SET NOCOUNT для управления выводом результатов в SQL.