Динамическое формирование sql-запроса

Обсуждение технических вопросов работы с системами управления базами данных (СУБД), работе с языком SQL и скриптовыми языками.
gali
Активный участник
Сообщения: 285
Зарегистрирован: 27 мар 2007, 07:43

Re: Динамическое формирование sql-запроса

Сообщение gali »

ладно, я попробую, расскажу, что получилось
чуть позже
Юрий
Активный участник
Сообщения: 239
Зарегистрирован: 13 янв 2005, 14:30
Используемое ПО: Lotsia PDM PLUS LT
Откуда: Украина, Донецк
Контактная информация:

Re: Динамическое формирование sql-запроса

Сообщение Юрий »

По просьбе gali я даю применение того что я описал выше с использованием аргументов отчета.
По сути порядок действий остается такой-же как и в предыдущем моем сообщении.
В первом отчете только добавляем аргумент, в котором будет реализована логика наполнения нашей
временной таблицы:

Код: Выделить всё

'insert into #tmp (str) values ('sss')'
Это значение по умолчанию для заглушки при проверке запроса
вы можете написать абсолютно любую команду, но что-бы она не отрабатывала с ошибкой.
далее код запроса во в кладке "SQL запрос":

Код: Выделить всё

select * from LSDBO.our_dummy
drop table #tmp
create table #tmp (str char(200))
exec (:zapros)
select * from LSDBO.our_dummy
Придерживаться необходимо именно такой последовательности.
Первая и последняя строка - усыпление бдительности проверки.
drop table и create table обязательно делать, что-бы подчиненный отчет увидел временную
таблицу. - наш аргумент в котором мы реализуем заполнение нашей временной таблицы.

Теперь пару комментариев по созданию отчетов. Так как мы используем временную таблицу, то при
закрытии Лоции она исчезнет. Поэтому:
1. При создании отчета сначала создаем первый отчет и при проверке скрипта идет его запуск
что приводит к созданию временной таблицы, после этого мы можем заниматься вторым отчетом.
2. Если нам нужно поправить второй отчет (внешний вид, колонки), но мы еще не запускали его
после запуска Лоции (временная таблица отсутствует). Надо либо зайти в скрипт первого отчета,
что-бы он запустил скрипт, либо просто его запустить и после этого приступать к наведению "красоты".

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

Вопросы?
gali
Активный участник
Сообщения: 285
Зарегистрирован: 27 мар 2007, 07:43

Re: Динамическое формирование sql-запроса

Сообщение gali »

у меня не получилось
запрос, как и раньше, не отрабатывает
вот это: exec (:zapros)
пустой отчет
смотрю аргумент - zapros - все нормально.
Сам запрос проверила в Management Studio - работает
Юрий
Активный участник
Сообщения: 239
Зарегистрирован: 13 янв 2005, 14:30
Используемое ПО: Lotsia PDM PLUS LT
Откуда: Украина, Донецк
Контактная информация:

Re: Динамическое формирование sql-запроса

Сообщение Юрий »

Пустой отчет первый или пустой отчет второй?
Значение по умолчанию в аргумент добавили или оставили пустым?
Связанный отчет сделали?
gali
Активный участник
Сообщения: 285
Зарегистрирован: 27 мар 2007, 07:43

Re: Динамическое формирование sql-запроса

Сообщение gali »

да, если в SQL прописать insert into ... что-нибудь
в отчете появляется это самое что-нибудь
gali
Активный участник
Сообщения: 285
Зарегистрирован: 27 мар 2007, 07:43

Re: Динамическое формирование sql-запроса

Сообщение gali »

Юрий писал(а):Пустой отчет первый или пустой отчет второй?
Значение по умолчанию в аргумент добавили или оставили пустым?
Связанный отчет сделали?
первый отчет я не настраивала (внешний вид)
значение по умолчанию ''
в первом отметила "связанный", выбрала второй и там еще какой-то параметр, пробовала и с одним и с другим
gali
Активный участник
Сообщения: 285
Зарегистрирован: 27 мар 2007, 07:43

Re: Динамическое формирование sql-запроса

Сообщение gali »

запускаю из действия первый отчет, вижу заголовок от первого, а форма отчета из второго - шапка и больше ничего
Юрий
Активный участник
Сообщения: 239
Зарегистрирован: 13 янв 2005, 14:30
Используемое ПО: Lotsia PDM PLUS LT
Откуда: Украина, Донецк
Контактная информация:

Re: Динамическое формирование sql-запроса

Сообщение Юрий »

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

http://docs.google.com/Doc?id=dd9twnzr_1dc84qbc5
gali
Активный участник
Сообщения: 285
Зарегистрирован: 27 мар 2007, 07:43

Re: Динамическое формирование sql-запроса

Сообщение gali »

спасибо огромное

у меня почти то же самое
поставила в значение по умолчанию 'insert into #tmp_p (autor, who) values ('я', 'он')' - ругается на синтаксис.
Поменяла: 'insert into #tmp_p (autor, who) values (~'я~', ~'он~')'
прошло, и отобразилось в отчете. Но при следующем входе в SQL и сохранении ругается на строку по умолчанию

Подозреваю, что в запросе, который реально передаю через параметр тоже не проходит синтаксис
Юрий
Активный участник
Сообщения: 239
Зарегистрирован: 13 янв 2005, 14:30
Используемое ПО: Lotsia PDM PLUS LT
Откуда: Украина, Донецк
Контактная информация:

Re: Динамическое формирование sql-запроса

Сообщение Юрий »

Тут как говорится надо поэкспериментировать... :wink:
gali
Активный участник
Сообщения: 285
Зарегистрирован: 27 мар 2007, 07:43

Re: Динамическое формирование sql-запроса

Сообщение gali »

все равно не получается
после передачи в качестве параметра запроса: select ... into Into #tmp_p from ...
в таблицу ничего не попадает. Причем, запрос упростила до примитива (проверила в SQL Server Management Studio- работает).
Что примечательно, когда я билась со значением по умолчанию для параметра, прошел вариант с двойными кавычками для всего значения:
"insert into #tmp_p (id, autor, who, what) values(1, 'я', 'он', 'вставка по умолчанию')"
с запросом этот номер не прошел
Юрий
Активный участник
Сообщения: 239
Зарегистрирован: 13 янв 2005, 14:30
Используемое ПО: Lotsia PDM PLUS LT
Откуда: Украина, Донецк
Контактная информация:

Re: Динамическое формирование sql-запроса

Сообщение Юрий »

Нельзя делать select ... into Into #tmp_p from ...
Эта команда пытается создать временную таблицу, а она у нас есть
ошибка просто подавляется системой и ничего не происходит.
Можно заполнять только insert into #tmp_p (.....) select .... from .....
gali
Активный участник
Сообщения: 285
Зарегистрирован: 27 мар 2007, 07:43

Re: Динамическое формирование sql-запроса

Сообщение gali »

я пробовала закомментарить craete перед exec - результат такой же.

спасибо, попробую так
gali
Активный участник
Сообщения: 285
Зарегистрирован: 27 мар 2007, 07:43

Re: Динамическое формирование sql-запроса

Сообщение gali »

оказывается собака вот где порылась: я выбирала id и пыталась затолкать его в поле, типа int
поменяла тип и изменила имя столбца
ВСЕ ЗАРАБОТАЛО!
это РЕАЛЬНО работает!

Юрий, Вы гений!
спасибо
Юрий
Активный участник
Сообщения: 239
Зарегистрирован: 13 янв 2005, 14:30
Используемое ПО: Lotsia PDM PLUS LT
Откуда: Украина, Донецк
Контактная информация:

Re: Динамическое формирование sql-запроса

Сообщение Юрий »

Та не за что, не за что... :oops: :D
Обращайтесь если что... :) :)
Ответить