Использование параметров в службах отчетов MS (SQL Server 2008) для источника данных ODBC
-
08-06-2019 - |
Вопрос
Я пишу отчет в Visual Studio, который принимает входной параметр пользователя и запускается на основе источника данных ODBC.Я хотел бы написать запрос вручную, и службы отчетов заменили часть предложенияwhere на значение параметра перед отправкой его в базу данных.Кажется, что происходит то, что @parmName
Я предполагаю, что будет заменено, на самом деле отправляется как часть оператора SQL.Я где-то упускаю какие-то настройки конфигурации или это просто невозможно?
Я не использую параметр фильтра в этом инструменте, поскольку он возвращает полный набор данных из базы данных и выполняет фильтрацию на SQL-сервере.
Решение
Похоже, вам нужно рассматривать оператор 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 col1, col2 from table1 where col3 = ?
Тогда порядок ваших параметров становится важным, но он менее уязвим для SQL-инъекций, чем простое добавление значения параметра.
Обнаружена та же проблема при попытке запросить базу данных доступа через ODBC.
Мой первоначальный запрос: SELECT A.1 FROM A WHERE A.1 = @parameter
привело к ошибке.Изменено на: SELECT A.1 FROM A WHERE A.1 = ?
.
Затем вам необходимо сопоставить параметр запроса с параметром отчета.
Меня немного смущает этот вопрос. Если вы ищете простое использование параметров, то обозначения будут такими:*paramName*
, однако если вы хотите структурно изменить WHERE
(как вы могли бы использовать в sql+ ?), то вам действительно следует использовать собственный код в отчете, чтобы определить функцию, которая возвращает требуемый sql для запроса.
К сожалению, при использовании пользовательского кода на параметры нельзя ссылаться непосредственно в сгенерированном запросе, но их значения должны быть объединены в результирующую строку, что создает потенциальную возможность SQL
инъекция.