Как задать поле, полученное из SQL-запроса, в качестве параметра другой хранимой процедуры в Crystal Reports?

#sql #visual-studio #crystal-reports

Вопрос:

У меня такая проблема: я использую Crystal Reports в качестве инструмента отчетности, и в одном из моих отчетов у меня есть две хранимые процедуры.

Первый извлекает 3 столбца (назовем их A, B и C). А вторая извлекает два столбца (D и E), но проблема в том, что эта вторая хранимая процедура использует A (из первой хранимой процедуры) в качестве параметра.

Таким образом, данные из второй хранимой процедуры зависят от «N» записей, полученных первой хранимой процедурой в столбце A.

Можно ли прикрепить поле «A» в качестве параметра второй хранимой процедуры из Crystal Reports? Или я должен сделать это из SQL?

Заранее спасибо!

Ответ №1:

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

Чтобы обойти эту проблему, я бы рекомендовал использовать вложенный отчет. В вашем основном отчете будет использоваться первая хранимая процедура для получения столбцов A, B и C. Затем вы создаете вложенный отчет, связанный со столбцом A, и используете вторую хранимую процедуру в качестве базы данных для получения оставшихся столбцов в вашем отчете.

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

В качестве альтернативы вы можете немного программировать базу данных и создать новую хранимую процедуру, которая выполняет работу обеих других хранимых процедур и возвращает все необходимые столбцы в одном наборе данных. Если это можно сделать с помощью запроса с использованием соответствующего типа «ПРИСОЕДИНИТЬСЯ», то этот параметр может быть более эффективным, чем параметр вложенного отчета. Однако, если для этого потребуется курсор, я бы выбрал опцию вложенного отчета.