Я реализовал нечто подобное в SQL Server Standard, чтобы не платить за Enterprise.Сначала я создал отчет под названием «Запланировать DDR» (Отчет, управляемый данными).Этот отчет имеет следующие параметры:
Отчет по расписанию: имя отчета SSRS (включая папку), который вы хотите запустить при выполнении теста данных.Например, "/Accounting/Report1".
Набор параметров: строка, которая будет использоваться для поиска параметров, используемых в отчете.Например, «ABC».
Запрос на проверку необходимости запуска отчета: SQL-запрос, который будет возвращать одно значение, нулевое или ненулевое.Ноль будет интерпретироваться как «не запускать этот отчет»
Получатели электронной почты: список разделенных точкой с запятой получателей электронной почты, которые получат отчет, если он будет запущен.
Обратите внимание, что «Запланируйте отчет DDR »- это отчет, который мы здесь работаем, и он отправит мне свой вывод;он запускает другой отчет - в данном случае это «/ Accounting / Report1», и именно этому отчету нужны эти адреса электронной почты.Так что «Планирование DDR» на самом деле не отчет, хотя он запланирован и выполняется как единое целое - это гаджет для создания и запуска отчета.
У меня также есть таблица в SQL, определенная следующим образом:
CREATE TABLE [dbo].[ParameterSet](
[ID] [varchar](50) NULL,
[ParameterName] [varchar](50) NULL,
[Value] [varchar](2000) NULL
) ON [PRIMARY]
Каждый набор параметров - в данном случае «ABC» - имеет набор записей в таблице.В этом случае записи могут быть ABC / placecode / AA и ABC / year / 2013, что означает, что в ABC есть два параметра: placecode и year, и они имеют значения «AA» и «2013».
Набор данных для отчета «Запланировать DDR» в SSRS:
DDR.dbo.DDR3 @reportName, @parameterSet, @nonZeroQuery, @toEmail;
DDR3 - это хранимая процедура:
CREATE PROCEDURE [dbo].[DDR3]
@reportName nvarchar(200),
@parameterSet nvarchar(200),
@nonZeroQuery nvarchar(2000),
@toEmail nvarchar(2000)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
select ddr.dbo.RunADDR(@reportName,@parameterSet,@nonZeroQuery,@toEmail) as DDRresult;
END
RunADDR - это CLR.Вот схема того, как это работает;Я могу опубликовать некоторый код, если кому-то захочется.
- Настройка учетных данных
- Выберите все параметры в таблице ParameterSet, где поле parameterSet соответствует имени набора параметров, переданному из расписания.Отчет DDR
- Для каждого из этих параметров
- Настройте массив параметров для хранения параметров, определенных в извлеченных строках.(Вот как вы используете таблицу для динамического заполнения параметров.)
- Конец для
- Если есть значение «nonZeroQuery», переданное из расписания A DDR
- Затем запустите nonZeroQuery и выйдите, если вы вернули ноль строк.(Таким образом вы предотвращаете выполнение запроса, если какое-либо условие не выполняется; любой запрос, который возвращает что-либо, отличное от нуля, разрешает выполнение отчета)
- Конец, если
- Сейчаспопросить SSRS запустить отчет, используя параметры, которые мы только что извлекли из таблицы, и имя отчета, переданное из расписания A DDR
- Получить вывод и записать его в локальный файл
- Emailфайл на любые адреса электронной почты, которые были переданы из расписания A DDR