Вы можете хранить параметры и их значения при каждом выполнении отчета.
Примечание : некоторые из этих встроенных функций SQL могут отсутствовать на вашем сервере, который зависит от версии сервера. В этом случае легко найти альтернативу или даже создать собственную функцию.
Например, в конце каждой хранимой процедуры, используемой в отчете, поместите эту часть SQL запрос, который использует вновь созданную таблицу dbo.ReportParameterValuePairs
:
INSERT INTO dbo.ReportParameterValuePairs
(ReportName, ParameterValuePair, ExecutionDateTime)
VALUES(
'MyReport',
'$$$parameter1$$$: ' + @parameter1 + ',' +
'$$$parameter2$$$: ' + @parameter2,
GETDATE())
Позже будет понятно, почему эти данные хранятся и почему таким образом.
Шаг вложения будет создавать процедуру, которая будет извлекать значение какого-либо параметра во время последнего выполнения отчета:
CREATE PROCEDURE spRetrieveReportParameterValue
@parameter NVARCHAR(100),
@report NVARCHAR(100)
AS
BEGIN
-- this is an example
DECLARE @parameters NVARCHAR(MAX) = '$$$parameter1$$$: value1, $$$parameter2$$$: value2'
-- in reality parameter-value pairs will be retrieved from database
--DECLARE @parameters NVARCHAR(MAX) =
-- (SELECT TOP 1 ParameterValuePair
-- FROM dbo.ReportParameterValuePairs
-- WHERE ReportName = @report
-- ORDER BY ExecutionDateTime DESC)
--SELECT @parameters
DECLARE @parameterValuePair NVARCHAR(200) =
(SELECT * FROM STRING_SPLIT (@parameters, ',')
WHERE
VALUE LIKE '%$$$' + @parameter + '$$$%')
--SELECT @parameterValuePair
DECLARE @value NVARCHAR(100) =
(SELECT * FROM STRING_SPLIT (@parameterValuePair, ':') WHERE value NOT LIKE '%$$$%')
SELECT TRIM(@value) AS ParameterValue
END
Параметры процедуры : параметр, значение которого необходимо, отчет о выполнении.
Пары параметр-значение хранятся в одной строке. Для доступа к этой таблице поиска данных dbo.ReportParameterValuePairs
для текущего отчета. Упорядочить данные по дате и времени выполнения, начиная с самых последних.
Строка пар параметр-значение будет разбита с использованием ,
. Результатом этого разделения является таблица, которая состоит из пар параметр-значение. Различие между параметрами и их значениями составляет $$$
mark. Из-за этого условие в запросе VALUE LIKE '%$$$' + @parameter + '$$$%'
. В переменной @parameterValuePair
теперь хранится нужный параметр и его значение.
После еще одного разделения, на этот раз с использованием :
, поскольку оно отделяет значение от имени параметра, результатом разделения будет две строки. Один содержит параметр и отметки $$$ ( $$$ [параметр] $$$ ), а другой содержит значение. Используя условие WHERE value NOT LIKE '%$$$%'
, значение параметра будет сохранено в переменной @value
.
Последний шаг процедуры - обрезать значение, если в конце и в начале * 1044 есть пустые пробелы и вернуть его как ParameterValue
.
Чтобы извлечь это значение из отчета, создайте DataSet для каждого параметра отчета. Этот DataSet предоставит параметру значение по умолчанию:
- щелкните правой кнопкой мыши DataSets
- выберите Добавить набор данных
- выберите вкладка / карта Запрос
- имя Набор данных
- выбор Источник данных
- для типа запроса выберите Текст
- введите
spRetrieveReportParameterValue 'parameter1', 'MyReport'
, где parameter1
- имя параметра, последнее значение которого будет получено - щелкните Refre sh Поля
Последний шаг - установить значение по умолчанию для параметра:
- щелкнуть правой кнопкой мыши параметр
- выберите Свойства параметра
- выберите карту / вкладку Значения по умолчанию
- выберите вариант Получить значения из запроса
- для набора данных выберите вновь созданный набор данных
- для поля значения выберите ParameterValue
Это должен быть результат: