0

В новом отчете SSRS 2008 я собираюсь изменить встроенный SQL на сохраненную процедуру , поскольку это требование для проекта, над которым я работаю. SQL отлично работает в отчете SSRS 2008, но имеет проблемы в хранимой процедуре.Отчет SSRS 2008 не работает с использованием хранимой процедуры

сообщение об ошибке, которое отображается следующая:

выполнения запроса не удалось для набора данных Msg 8114, уровень 16, состояние 1 процедура spRec, линия 0 Ошибка преобразования типа данных VARCHAR в целое.

Хранимая процедура работает, если я выбираю только 1 отчет. Однако, если я выбираю 2 или более отчетов, которые возникают при возникновении вышеуказанной ошибки.

Отчет SSRS 2008 содержит 18 встроенных таблиц в основном табло. Вложенные таблицы в главном табло SSRS будут отображать выбранные отчеты на основе параметра отчета, который пользователь. Встроенные отчеты будут отображаться на основе номера отчета. Кроме того, я хочу, чтобы данные для выбранных отчетов возвращались из SQL.

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

Параметр отчета настроен так, чтобы разрешить несколько значений и тип данных = текст. Набора данных для передачи данных параметра отчета выглядит следующим образом:

SELECT 'Locator' AS rptName, 1 AS rptValue 
     UNION 
    SELECT 'letter',2 
     UNION 
    SELECT 'Wallet ', 3 
    UNION 
    SELECT 'Cum Stu', 4 
    UNION 
    SELECT 'Attend', 5 
    UNION 
    SELECT 'Test',6 

SQL, перед каждой секцией выглядит следующим образом:

IF 1 in (@report) 


IF 2 in (@report) 

Я попытался изменить свойство параметра отчета в целом и если заявления, перечисленные выше, но они не сработали.

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

+1

И только процедура, выполняемая из анализатора запросов, отлично работает? Я не вижу, как вы называете процедуру, и что внутри нее ... –

ответ

1

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

У вас есть 2 варианта. Вариант 1. Сделайте раскрывающийся список SSRS одним раскрывающимся значением.

Если это не является жизнеспособным вариантом, то здесь вариант 2:

Вы будете иметь, чтобы сделать тип данных для параметра @report в хранимой процедуре что-то вроде (п) VARCHAR (1000); что-то достаточно длинное, чтобы обрабатывать строку со всеми возможными значениями. Затем вам нужно разбить строку на отдельные значения, чтобы вы могли использовать их в предложении IN. Вот раскол UDF, который я использовал в прошлом.

CREATE FUNCTION [dbo].[udf_Split] 
    ( @List  varchar(8000), 
     @Delimiter varchar(5) 
    ) 
    RETURNS @TableOfValues table 
     ( RowID smallint IDENTITY(1,1), 
     [Value] varchar(100) 
    ) 
AS 
    BEGIN 

     DECLARE @LenString int 

     WHILE len(@List) > 0 
     BEGIN 

      SELECT @LenString = 
       (CASE charindex(@Delimiter, @List) 
        WHEN 0 THEN len(@List) 
        ELSE (charindex(@Delimiter, @List) -1) 
       END 
       ) 

      INSERT INTO @TableOfValues 
       SELECT substring(@List, 1, @LenString) 

      SELECT @List = 
       (CASE (len(@List) - @LenString) 
        WHEN 0 THEN '' 
        ELSE right(@List, len(@List) - @LenString - 1) 
       END 
       ) 
     END 

     RETURN 

    END 

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

IF 1 IN (SELECT value FROM dbo.udf_Split(@report, ',')) 

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

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