MS Reporting 2010: используйте многозначный раскрывающийся список для добавления / вычитания предложения WHERE из SQL-запроса - PullRequest
0 голосов
/ 19 августа 2010

В настоящее время я пытаюсь создать отчет в Visual Studio 2005 для MSSQL 2005. Мне нужно предоставить многозначный раскрывающийся список, который позволил бы пользователю выбрать один или несколько параметров.Если пользователь выбирает одну или несколько из этих опций, мой оператор SQL должен будет добавить AND column = 'something' к моему запросу SQL.

Мне интересно, как мне это сделать.Возможно ли это, или мне нужно создать страницу ASP с этими параметрами, а затем переслать ее на сервер отчетов?Я иду в неправильном направлении?Есть ли лучший способ сделать это?

Хотелось бы просто создать несколько элементов управления флажками, но, видимо, это не вариант (прочитать что-то о взломе с помощью текстовых полей и крылышек - неприемлемо).1006 *

Заранее спасибо за помощь.

1 Ответ

1 голос
/ 19 августа 2010

(при условии, что вы используете источник данных SQLServer) измените запрос так, чтобы он включал AND column IN (@ParameterName).

Если ваш параметр ParameterName еще не существует, он должен появиться в списке отчетов.Параметры доступны в меню «Отчет».Выберите его в диалоговом окне «Параметры отчета» и установите флажок «Многозначный» (если он еще не установлен).

Если вы сейчас попробуете запустить отчет в окне предварительного просмотра, вы увидите, что ParameterName может иметь нескольковыбранные значения.

РЕДАКТИРОВАТЬ, следующие комментарии:

Пара возможностей -

  1. Использование динамического SQL: жесткий код доступных значений для множественного выборапараметры, так что их метки показывают удобные для пользователя описания типа адреса электронной почты, который будет включен, а их значения содержат имена полей, которые будут выбраны.Установите запрос во время выполнения, чтобы он был похож на "...and eMailID in (" & Join(Parameters!EMailField.Value, ", ") & ")".Динамический SQL обычно не рекомендуется из-за риска атак SQL-инъекций, но поскольку вы будете жестко программировать только доступные значения, это не должно вызывать проблем.

  2. Использование предложений IN внутриПредложения IN: жестко закодируйте доступные значения для параметров множественного выбора, чтобы их метки отображали удобные описания типа включаемого адреса электронной почты, а их значения содержали значимые коды (такие как O, G и S).,Затем измените запрос так:

and eMailID in

   ( (case when 'O' in (@EMailField) then OwnersEmailField else NULL end),
     (case when 'G' in (@EMailField) then GeneralEmailField else NULL end),
     (case when 'S' in (@EMailField) then ServerEmailField else NULL end)
   )
...