2015-01-28 3 views
0

Я пытаюсь создать параметр, который будет принимать несколько значений для отчета. Отчет сбегает процедуру и работает, если выбрать только одну операцию сбора, но когда я пытаюсь выбрать несколько, я получаю:SSRS Параметр, не принимающий несколько значений

An error has occurred during report processing. 
Query execution failed for dataset 'proc_Incentives' 
Error converting data type nvarchar to int 

В моей процедуре, я объявил @CO_ID Int в качестве переменной.

В предложении WHERE я установил CO.CodeID в (@CO_ID).

Кроме того, CO.CodeID хранится как INT в базе данных.

В своем докладе SSRS, я создал новый набор данных с именем «prmCollectionOp», в котором я написал простой запрос:

Select CodeID, Description from IDViewCollectionOp Order by Description; 

Тогда я пошел создал новый параметр с именем «CO_ID» и сделал тип данных Integer и отметьте «Разрешить множественные значения».

В разделе Доступные значения, я выбрал Получить значения из запроса, выбрать prmCollectionOp и поместить CodeID в поле значений и Описание в поле метки.

Для значений по умолчанию я также выбрал Получить значения из запроса и выбрал набор данных prmCollectionOp со значением поля CodeID.

Это все работает с одной единственной операцией по сборке, но не с несколькими.

Любые предложения по поводу того, что я, возможно, пропустил, чтобы разрешить выбор нескольких значений в параметре?

Спасибо,

ответ

0

Я знаю, что это сложно один: я буду рекомендовать несколько статей, которые объясняют, как это сделать.

Один из Scott Murray, а другой - от Jeff Moden (Скотт на самом деле ссылается на статью Джеффа в своем).

Для хранимой процедуры вы можете сделать следующий

Скотта объясняет:

Сначала мы передаем в каскадном параметре многозначного как единое целое, и мы используем параметр VARCHAR (который должен быть достаточно большим, чтобы принять максимальную длину всех параметров, которые могут быть выбраны). Затем, используя функцию сплиттера, значения анализируются и помещаются во временную таблицу, #YEAR_LIST. Наконец, критерии года переносятся из того, что часть предложения where является частью объединений.

Есть и другие способы, но это должно решить проблему.

Надеюсь, это поможет!

+0

Спасибо Bactos, я нашел первый через Google и попробовал, но не везло, но я вернусь и попробовать еще раз. – MISNole

+0

Я добавил выражение в набор данных процедуры для переменной, которая должна принимать несколько значений: = Join (Parameters! CO_ID.Value, ","), но это не работает ... Ugh. – MISNole

+0

Вы пытались использовать функцию разделения? Вы можете использовать это с рекурсивным CTE: http://www.sqlservercentral.com/blogs/querying-microsoft-sql-server/2013/09/19/how-to-split-a-string-by-delimited-char -in-sql-server/и http://www.codeproject.com/Tips/666620/T-SQL-Most-Practical-Split-Function. Поскольку, когда вы используете хранимую процедуру и передаете параметр в эту процедуру, это передается как 1 значение (независимо от того, сколько значений вы считаете своим), вы должны разделить их. – Bactos

0

Просто используйте присоединиться многозначными параметры с запятой разделителем (Dataset-> Paremeter-> Expression)

В StoredProcedure, разделенного входного значения по ограничителю (,).затем обработать значение в запросе с крестом применить

Dataset properties Parameter mapping expression

+0

Спасибо Ezhil, вы могли бы поделиться со мной, как это сделать: В хранимой процедуре разделите входное значение на разделитель (,)? – MISNole

+0

Пропустить комбинированный ввод с помощью ограничителя для процедуры хранения (например, usp_process (input varchar (max)). Затем развернуть функцию возврата значения таблицы split string. После этого join functon with cross apply Перейдите по этому URL-адресу, как создать функцию разделения строки таблицы значений http://www.sqlservercentral.com/blogs/querying-microsoft-sql-server/2013/09/19/how-to-split-a-string-by-delimited-char-in-sql-server/ Запрос будет выберите * от таблица крест apply splitstring (input, ',') –

Смежные вопросы