SQL Server, управляемая данными подписка
-
29-09-2019 - |
Вопрос
У меня есть отчет на почасовой основе для проверки новых заказов. Однако он работает отлично, я хотел бы отправить только отчет только если там хотя бы один заказ. Если отчет пуст - я не хочу вообще отправлять отчет.
Чтобы расширить это, я хотел бы отправить только отчет только если есть новые заказы.
Идеи?
Решение
Просто добавьте условие в запросе DDS, чтобы проверить время заказа. Если в прошлом час есть какие-либо заказы, ваш запрос должен вернуть свой набор результатов, иначе ничего не верните.
Например, в вашем запросе добавьте следующую логику
DECLARE @HoursAgo int
SELECT Top 1 @HoursAgo = DateDiff('hh',getdate(), OrderTime)
FROM Orders
ORDER BY OrderTime DESC
В вашем запросе добавьте следующее предложение
WHERE @HoursAgo > 0
Вы также можете добавить дополнительные проверки, чтобы убедиться, что заказ имеет текущий день.
Другие советы
Существует свойство набора данных RDL под названием «NOROWS», которые могут отображать пользовательское сообщение, если наборе данных не будет возвращен строки. Он все еще будет отправлять пустой отчет, просто со специальным сообщением.
Если вы хотите, чтобы подписка не вышло отчета, то единственный способ, которым я должен сделать это, - это проверить количество строк подписчика выбора, если ваша сохраненная процедура и бросить ошибку, если счетчик строки равен нулю. Не элегантный способ вытащить это, но он не будет отправлять отчет, потому что ошибка происходит на стороне T-SQL, а SSRS не смогут рендерировать отчет.
declare @rows int
select @rows = -1
<select statement here>
select @rows = @@rowcount
if ( @rows < 1 )
begin
RAISERROR ('no rows returned', 11, 1 );
end