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

Мне нужно передать список значений ключей в хранимую процедуру в SQL-Server, и эта хранимая процедура затем вернет значения, необходимые для Crystal Report.

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

CREATE TYPE [dbo].[SiteIdentifiers] AS TABLE 
(
    [SiteId]     BigInt, 
    PRIMARY KEY ([SiteId])
)

Однако теперь мне нужно изменить свой Crystal Report, чтобы использовать его в качестве входного параметра. (Хранимая процедура начинается с ...

CREATE  PROCEDURE [dbo].[sp_SiteReport]
    @SiteIds    [dbo].[SiteIdentifiers] ReadOnly
AS

Отчеты в основном будут вызываться с помощью ColdFusion или C # .net, поэтому я не думаю, что возникнет проблема с добавлением идентификаторов в тип таблицы. Но я не знаю, как определить этот параметр в Crystal. Список типов в мастере создания нового параметра очень скуден.


person thursdaysgeek    schedule 27.09.2010    source источник


Ответы (3)


Я не думаю, что вы правильно используете концепцию Parameter в Crystal. Насколько мне известно, его лучше всего использовать для ручного ввода данных (и вы пытаетесь передать многомерный массив, а не лучшее его использование). Я рекомендую:

  1. Ваша первая идея о вводе таблицы в виде строки, разделенной запятыми.
    ИЛИ
  2. Сохранение вывода вашей процедуры во временную таблицу на SQL-сервере и ее импорт.
person PowerUser    schedule 27.09.2010
comment
Если хранимой процедуре требуются параметры, разве Crystal не нужно будет их указывать? Это не значит, что я не буду использовать строку с разделителями-запятыми, но это скорее начальная точка, которую вы делаете о неправильном использовании параметров. Если я собираюсь использовать Crystal, а хранимые процедуры нуждаются в параметрах, кажется, что это суть параметров. - person thursdaysgeek; 28.09.2010
comment
Ах, не понимал, что хранимому процессу нужны параметры (хотя вы это четко сказали). В таком случае, обязательно ли нужно сгенерировать параметры с помощью Crystal? Что, если вы сначала запустите процедуру, загрузите ее запросом, хранящимся на sql-сервере, а затем запустите Crystal? - person PowerUser; 28.09.2010

Насколько я могу судить, это невозможно. Crystal не принимает типы данных, которые он не распознает из других приложений, таких как SQL Server.

person thursdaysgeek    schedule 20.10.2010

Обычно отчет Crystal, запускающий процедуру, создается путем наведения отчета на процедуру - все необходимые параметры для процедуры автоматически генерируются в отчете. Если вы сделали это в дизайнере Crystal Reports без отчета, генерирующего входной параметр таблицы, то я не думаю, что вы можете сделать это таким образом.

Рассмотрели ли вы, как еще одну альтернативу использованию списка, разделенного запятыми:

  • создание таблицы для хранения идентификаторов сеансов и входных значений,
  • заполнение таблицы непосредственно перед запуском отчета идентификатором сеанса и необходимыми входными значениями,
  • передача идентификатора сеанса в отчет в качестве параметра,
  • передача идентификатора сеанса из отчета в процедуру в качестве параметра,
  • кодирования процедуры выбора входных значений из новой таблицы на основе идентификатора сеанса и удаления записей для идентификатора сеанса после запуска отчета?
person Community    schedule 28.09.2010