Использование параметров в MS Reporting Services (SQL Server 2008) с источником данных ODBC

Я пишу отчет в Visual Studio, который принимает параметр ввода пользователя и работает с источником данных ODBC. Я хотел бы написать запрос вручную и попросить службы отчетов заменить часть предложения where значением параметра перед его отправкой в ​​базу данных. Кажется, что происходит то, что, как @parmName я предполагаю, будет заменена, на самом деле отправляется как часть оператора SQL. Мне где-то не хватает настройки конфигурации или это просто невозможно?

Я не использую опцию фильтра в инструменте, потому что это, похоже, возвращает полный набор данных из базы данных и выполняет фильтрацию на SQL Server.

Ответов (4)

Решение

Похоже, вам нужно рассматривать оператор SQL как выражение. Например:

="Select col1, col2 from table 1 Where col3 = " & Parameters!Param1.Value 

Если предложение where является строкой, вам необходимо сделать следующее:

="Select col1, col2 from table 1 Where col3 = '" & Parameters!Param1.Value & "'"

Важно: не используйте разрывы строк в выражении SQL. Если вы это сделаете, вы получите сообщение об ошибке.

Холла, возвращайся, если тебе понадобится дополнительная помощь.

Обнаружена такая же проблема при попытке запросить базу данных доступа через ODBC.

Мой исходный запрос: SELECT A.1 FROM A WHERE A.1 = @parameter привел к ошибке. Измененный в: SELECT A.1 FROM A WHERE A.1 = ? .

Затем вам нужно сопоставить параметр запроса с параметром отчета.

Разве ODBC не использует старый знак "?" синтаксис для параметров? Попробуй это:

select col1, col2 from table1 where col3 = ?

Тогда порядок ваших параметров становится важным, но он менее уязвим для SQL-инъекции, чем простое добавление значения параметра.

Я немного запутался в этом вопросе, если вы ищете простое использование параметров, тогда обозначение будет следующим:, *paramName* однако, если вы хотите структурно изменить WHERE предложение (как вы могли бы использовать sql +?), Тогда вам действительно следует использовать собственный код внутри отчет для определения функции, которая возвращает требуемый sql для запроса.

К сожалению, при использовании настраиваемого кода нельзя напрямую ссылаться на параметры в сгенерированном запросе, но их значения должны быть объединены в результирующую строку, что создает возможность для SQL внедрения.