Страница 3 из 4

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

Добавлено: 16 дек 2008, 10:01
gali
ладно, я попробую, расскажу, что получилось
чуть позже

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

Добавлено: 17 дек 2008, 09:01
Юрий
По просьбе 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. Если нам нужно поправить второй отчет (внешний вид, колонки), но мы еще не запускали его
после запуска Лоции (временная таблица отсутствует). Надо либо зайти в скрипт первого отчета,
что-бы он запустил скрипт, либо просто его запустить и после этого приступать к наведению "красоты".

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

Вопросы?

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

Добавлено: 17 дек 2008, 15:34
gali
у меня не получилось
запрос, как и раньше, не отрабатывает
вот это: exec (:zapros)
пустой отчет
смотрю аргумент - zapros - все нормально.
Сам запрос проверила в Management Studio - работает

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

Добавлено: 17 дек 2008, 15:41
Юрий
Пустой отчет первый или пустой отчет второй?
Значение по умолчанию в аргумент добавили или оставили пустым?
Связанный отчет сделали?

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

Добавлено: 17 дек 2008, 15:51
gali
да, если в SQL прописать insert into ... что-нибудь
в отчете появляется это самое что-нибудь

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

Добавлено: 17 дек 2008, 15:54
gali
Юрий писал(а):Пустой отчет первый или пустой отчет второй?
Значение по умолчанию в аргумент добавили или оставили пустым?
Связанный отчет сделали?
первый отчет я не настраивала (внешний вид)
значение по умолчанию ''
в первом отметила "связанный", выбрала второй и там еще какой-то параметр, пробовала и с одним и с другим

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

Добавлено: 17 дек 2008, 16:04
gali
запускаю из действия первый отчет, вижу заголовок от первого, а форма отчета из второго - шапка и больше ничего

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

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

http://docs.google.com/Doc?id=dd9twnzr_1dc84qbc5

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

Добавлено: 17 дек 2008, 17:28
gali
спасибо огромное

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

Подозреваю, что в запросе, который реально передаю через параметр тоже не проходит синтаксис

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

Добавлено: 18 дек 2008, 08:32
Юрий
Тут как говорится надо поэкспериментировать... :wink:

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

Добавлено: 18 дек 2008, 14:49
gali
все равно не получается
после передачи в качестве параметра запроса: select ... into Into #tmp_p from ...
в таблицу ничего не попадает. Причем, запрос упростила до примитива (проверила в SQL Server Management Studio- работает).
Что примечательно, когда я билась со значением по умолчанию для параметра, прошел вариант с двойными кавычками для всего значения:
"insert into #tmp_p (id, autor, who, what) values(1, 'я', 'он', 'вставка по умолчанию')"
с запросом этот номер не прошел

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

Добавлено: 18 дек 2008, 14:53
Юрий
Нельзя делать select ... into Into #tmp_p from ...
Эта команда пытается создать временную таблицу, а она у нас есть
ошибка просто подавляется системой и ничего не происходит.
Можно заполнять только insert into #tmp_p (.....) select .... from .....

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

Добавлено: 18 дек 2008, 17:37
gali
я пробовала закомментарить craete перед exec - результат такой же.

спасибо, попробую так

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

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

Юрий, Вы гений!
спасибо

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

Добавлено: 19 дек 2008, 08:32
Юрий
Та не за что, не за что... :oops: :D
Обращайтесь если что... :) :)