Передать параметр SSRS в запрос SQL

Я создал отчет SSRS, который должен просматривать данные из одной из нескольких таблиц с похожими именами, т. е. table001, table010, table011 и т. д. Когда я создавал отчет, я включал только три таблицы, из которых из более чем десятка. Все работало нормально, пока я не добавил в запрос все остальные таблицы, используя несколько операторов SELECT, объединенных вместе; он пытался отсортировать так много данных, что на рендеринг отчета ушло почти полчаса. Это не сработает.

Есть ли способ передать параметр SSRS в SQL-запрос, указав, к какой таблице получить доступ?


person Ben C.    schedule 01.08.2013    source источник
comment
Если запрос медленный, отчет будет медленным. Проблема не в передаче параметров из SSRS в базу данных, а в вашем запросе. Вам нужно выяснить, как решить вашу проблему объединения 12 таблиц вместе, и ваши проблемы с отчетами решатся сами собой.   -  person Tom    schedule 02.08.2013
comment
@Tom - Вот почему я пытаюсь понять, как использовать переменную для имени таблицы. Если бы я мог это сделать, я мог бы запросить только одну таблицу, а не все из них - просто передайте параметр отчета в переменную, и он будет запрашивать на основе этого. Я просто понятия не имею, как это сделать.   -  person Ben C.    schedule 02.08.2013
comment
Извините, теперь я вижу, я сначала не понял вопроса. Значит, по какому-то параметру будете выбирать из какой-то таблицы? Например, @Param = 'Что-то', затем выберите из таблицы 008? Вы можете определить это в операторе if/else или case в своем запросе.   -  person Tom    schedule 02.08.2013
comment
@ Том - Да, что-то в этом роде. Если бы вы могли немного расширить это, это было бы здорово. Я еще новичок в SQL. Скорее всего, будет параметр, значением которого будет строка «001». Я пытался просто сделать что-то вроде FROM @Param, но потом он жаловался на статические переменные.   -  person Ben C.    schedule 02.08.2013


Ответы (2)


Основываясь на ваших комментариях, вы можете сделать следующее

DECLARE @Parameter NVARCHAR(15) = 'Foo'

SELECT CASE 
WHEN @Parameter IN ('Foo', 'Bar')
    THEN (
            SELECT *
            FROM table001
         ) 
WHEN @Parameter IN ('Foobar')
    THEN (
            SELECT *
            FROM table002
         ) 
ELSE
         (
            SELECT *
            FROM table003
         )
END


Поочередно

SELECT CASE @Parameter 
WHEN 'Foo'
    THEN (
            SELECT *
            FROM table001
         ) 
WHEN 'Bar'
    THEN (
            SELECT *
            FROM table002
         ) 
WHEN 'Foobar'
    THEN (
            SELECT *
            FROM table003
         ) 
ELSE
    (
        SELECT *
        FROM @table004
    )
END
person Tom    schedule 01.08.2013
comment
В первом примере я не вижу, как значение параметра отчета попадает в запрос. Похоже, вы просто объявляете переменную SQL и сразу же присваиваете ей значение. - person Ben C.; 02.08.2013
comment
Кроме того, я попробовал второй пример. Это дало мне три ошибки - Must declare the scalar variable @Param, Incorrect syntax near the keyword ELSE и Incorrect syntax near the keyword SET - person Ben C.; 02.08.2013
comment
Ну да, это было в демонстрационных целях. Может быть, я не понимаю вопроса - весь ваш вопрос заключается в том, как передать параметр в SSRS? Я думаю, это именно то, о чем говорит название. В этом случае msdn.microsoft.com/en -us/library/aa337432(v=sql.105).aspx — подробная статья на эту тему. - person Tom; 02.08.2013
comment
Я уже пробовал то, что говорится в этой статье, несколькими способами, но безрезультатно. Я попробовал еще раз только что, и он все еще дает мне ошибку Must declare the scalar variable. - person Ben C.; 02.08.2013

Вы следовали руководству MSDN? Это тоже хорошо: http://sql-bi-dev.blogspot.com/2010/07/report-parameters-in-ssrs-2008.html

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

person David O    schedule 02.08.2013