• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

А как в восьмерке отлаживают запросы?

  • Автор темы Guest
  • Дата начала
G

Guest

Вопрос 1
Конструктор запроса создал текст запроса.
А как-то увидеть результат его выполнения (т е выборку данных в табличном виде) можно ?

Вопрос 2
Запрос состоит из большого количества вложенных запросов.
Конструктор запроса показывает мне состав только самого наружного запроса
Я вижу вложенные поля, а не весь вложенный запрос как целое


Как профи отлаживают такие сложные конструкции - только силой мысли ?
 
G

Guest

1. Запрос.Выполнить().Выгрузить() - возвращает переменную типа ТаблицаЗначений. Если написать Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам) То получим ДеревоЗначений. Ставим точку останова после этой строчки и смотрим то вышло.
Альтернативный вариант- если умеешь работать с обработкой КонсольОтчетов, то бросаешь туда запрос и смотришь что получилось. Если не умеешь- советую научиться. Обработка запускается в предприятии.

2. Вложенный запрос можно в тексте запроса найти по ключевому слову "Выбрать". Если, к примеру, у тебя присоединяется таблица вложенного запроса, то ты увидешь примерно такое
ЛЕВОЕ СОЕДИНЕНИЕ ( Выбрать <Вложенный запрос>) ПО <Связи>

МОгу сказхать про себя. Если нужно добавить доп поле или условие- чаще делаю руками, потому что большие запросы либо составляются из нескольких текстов(получить напрямую текст запроса нелья) либо в отчетах. А там верняк есть строчки для категорий. Конструктов сотрет "// Категории" и подобное.
 
G

Guest

1. Запрос.Выполнить().Выгрузить() - возвращает переменную типа ТаблицаЗначений. Если написать Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам) ...
Спасибо, Найлло!
Этот вариант сработал: Результат.Строки - [Показать значение в отдельном поле] и
дал мне искомую таблицу

С консолью отчетов тоже нормально, хотя в моем случае там в запросе очень
много параметров и заполнять их руками утомительно.

По вложенным запросам - в моем запросе много вложений с левым либо внутренним соединением и какое-то из них ,вероятно, гадит, задваивая результат.
Я и искал, можно ли каждое вложение выделить отдельно и протестировать результат
его выборки. Сейчас приходится кромсать текст программы, последовательно исключая
каждое вложение.
 
G

Guest

попробуй поймать итоговый текст запроса, если он сразу не открывается конструктором. Это можно сделать просто определив значение ЗАпрос.Текст перед выполнением.
Если запрос таки открвается конструктором, то открой каждый вложенный запрос и там слева внизу буит кнопка "Запрос"- там копируешь текст и в консоль. Посмотри сколько строк возвращает этот запрос. Если возвращает только одну, а у тебя в итоге задваивает- удали из полей все, кроме тех по которым идет объединение таблиц.
Хотя метод исключения чем то хорошь =)
 
G

Guest

попробуй поймать итоговый текст запроса ...

Спасибо, Найлло!
Метод возьму на вооружение
Ошибку нашел и она естественно оказалась не в запросе, а в предыдущем коде
Хотя до этого все куски запроса пришлось прогнать через консоль.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!