2016-06-15 2 views
0

Я читал бесчисленные сообщения по этой теме, но, похоже, я не могу получить какие-либо рекомендации по моей конкретной ситуации (которая не отличается от других. ..)Проблемы с использованием нескольких параметров в отчете SSRS (хранимая процедура)

У меня есть отчет SSRS. Dataset 1 использует хранимую процедуру, и в пункте, где я

and (@param is null or alias.column in 
    (select Item from dbo.ufnSplit(@param,','))) 

Я одолжил функцию dbo.ufnSplit с этого поста здесь: https://stackoverflow.com/a/512300/22194

FUNCTION [dbo].[ufnSplit] 
    (@RepParam nvarchar(max), @Delim char(1)= ',') 
RETURNS @Values TABLE (Item nvarchar(max))AS 
--based on John Sansoms StackOverflow answer: 
--https://stackoverflow.com/a/512300/22194 

    BEGIN 
    DECLARE @chrind INT 
    DECLARE @Piece nvarchar(100) 
    SELECT @chrind = 1 
    WHILE @chrind > 0 
    BEGIN 
     SELECT @chrind = CHARINDEX(@Delim,@RepParam) 
     IF @chrind > 0 
     SELECT @Piece = LEFT(@RepParam,@chrind - 1) 
     ELSE 
     SELECT @Piece = @RepParam 
     INSERT @Values(Item) VALUES(@Piece) 
     SELECT @RepParam = RIGHT(@RepParam,LEN(@RepParam) - @chrind) 
     IF LEN(@RepParam) = 0 BREAK 
    END 
    RETURN 
    END 

В наборе 2 я получаю значения, Я хочу, чтобы перейти к набору данных 1

select distinct list from table 

Мой параметр @param сконфигурирован, чтобы посмотреть на набор данных 2 доступных значений

Моя проблема в том, что если я выберу одно значение из раскрывающегося списка параметров для @param, отчет будет работать. Если я выберу несколько значений из раскрывающегося списка, я верну данные только для выбранного первого значения.

Мои ценности набора данных 2 не содержат какой-либо, 'ы

Я не пропустить что-нибудь для не в состоянии обеспечить достаточное количество информации? Я открыт для критики, обратной связи, и что нельзя делать для этого, я боролся с этой проблемой в течение некоторого времени, и не в коем случае не SQL эксперт :)

Приветствие, MD

Обновление Так SQL Profiler показывает мне это:

Exec зр ... @ пары = N'value1, значение2, value3 '

Вопросы являются: 1. не следует ли каждое значение быть завернуто в одиночных кавычках ? 2. Что такое N перед списком? 3. Угадывание конечных пробелов необходимо обрезать

+0

Из пользовательского интерфейса обозначена строка с запятой? –

+0

Используйте Profiler, чтобы узнать, какая команда SQL передается из SSRS на SQL Server. Затем вы узнаете, есть ли проблема в вашем proc или вашем отчете. Код, который вы показали до сих пор, выглядит правильно, поэтому проблема, вероятно, в какой-то другой части proc или report. –

ответ

0

Когда вы выбираете несколько значений из раскрывающегося списка параметров, они сохраняются в массиве. Чтобы преобразовать это в строку, которую вы можете передать на SQL, вы можете использовать функцию Join. Перейдите в свойства своего набора данных, а затем на вкладку «Параметры». Заменить значение параметра с этим выражением:

=Join(Parameters!param.Value, ",") 

Он должен выглядеть следующим образом:

enter image description here

Теперь ваша функция разделения будет получить один разделенные запятой строка, как это предполагается. Я также хотел бы предложить, чтобы функция разделения была отделена от пробелов от значений после их разделения.

+0

join дает мне тот же результат: «value1, value» они не разделяются одинарными кавычками, как они должны быть i.e. «value», «value2» – user2178462

+0

Они не должны разделяться отдельными кавычками. Это одна строка. Посмотрите в свою функцию split, нет ссылки на один символ кавычки. – StevenWhite

0

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

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

В моем наборе результатов были пробелы - как только я сделал rtrim на нем I не нужно было делать каких-либо причудливых соединений/разделов в SSRS.

+0

вы должны принять свой собственный ответ, поэтому будущие читатели увидят его как ответ. – bot

+0

говорит, что я не могу принять свой ответ в течение 21 часа – user2178462

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