Многозначный параметр в SSRS 2008 не работает - PullRequest
4 голосов
/ 02 апреля 2012

У меня есть параметр @Department и я установил его значение в наборе данных на =Join(Parameters!Department.Value,",").Я настроил его на прием нескольких значений, и в моем SQL есть следующее предложение: (RTRIM(G.DeptName) IN (@Department)).

. Оно работает всякий раз, когда пользователь выбирает один отдел, но совсем не работает, когда выбрано несколько отделов.Он работает, но не отображает никаких данных.Например, если я выбираю «Бухгалтерия», отображается информация «Бухгалтерия».Но если я выберу «Учет» и «Маркетинг», ничего не появится.

Есть идеи, почему это не работает?Кроме того, возможно ли сделать это таким образом с другими значениями, кроме «строковых» значений?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2012

Вы делаете ложное предположение.

IN ('1,2,3,4') очень отличается от IN (1,2,3,4) или IN ('1', '2', '3', '4')

То, что вы делаете в настоящее время первым.Вы проверяете, есть ли название вашего отдела в списке, длина которого составляет всего one ; строка @department .Это значение содержит запятые, но это все еще одна строка, и поэтому это все еще один элемент в списке.

У вас есть два варианта.

Динамически создавайте SQL, чтобы вашlist является частью sql, а не строковым параметром.

Или найдите одну из многих функций SPLIT(), доступных в режиме онлайн.Это тот, который я рекомендую.Затем вы можете сделать что-то вроде ...

WHERE
  RTRIM(G.DeptName) IN (SELECT * FROM dbo.split(@Department))

Или, что еще лучше, присоединиться к результатам функции SPLIT() ...

  yourTable AS G
INNER JOIN
  dbo.split(@department) AS department
    ON  RTRIM(G.DeptName) = department.item
0 голосов
/ 02 апреля 2012

Как сказал Демс, для этого вам нужна функция соединения.

вы можете использовать ее здесь http://blog.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx

остальные все в порядке с вашим запросом

WHERE
  RTRIM(G.DeptName) IN (SELECT * FROM dbo.split(@Department)) 

вместо (RTRIM(G.DeptName) IN (@Department))

должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...