basato sui dati di SQL Server fermata abbonamento invio
-
29-09-2019 - |
Domanda
Ho un rapporto in esecuzione sul controllo base oraria per i nuovi ordini. Sta funzionando ottima, tuttavia, vorrei inviare solo il rapporto se c'è almeno un ordine. Se il rapporto è vuoto - non voglio inviare il rapporto a tutti
.Per estendere questo, vorrei inviare solo il rapporto se non nuovi ordini.
idee?
Soluzione
Basta aggiungere una condizione nella query DDS per verificare il tempo di ordine. Se ci sono eventuali ordini nell'ultima ora la ricerca dovrebbe restituire il set di risultati altrimenti restituisce nulla.
Per esempio, nella query aggiungere il seguente logica
DECLARE @HoursAgo int
SELECT Top 1 @HoursAgo = DateDiff('hh',getdate(), OrderTime)
FROM Orders
ORDER BY OrderTime DESC
Nella vostra richiesta aggiungere la seguente clausola
WHERE @HoursAgo > 0
Si potrebbe anche voler aggiungere controlli supplementari per assicurarsi che l'ordine è dal giorno corrente.
Altri suggerimenti
C'è una proprietà del set di dati RDL chiamata "NoRows" in grado di visualizzare un messaggio personalizzato se l'insieme di dati non ha righe restituite. Sarà ancora inviare il rapporto vuoto, solo con un messaggio speciale.
Se si desidera che la sottoscrizione in misura non il fuoco fuori del rapporto, allora l'unico modo che conosco per farlo è quello di verificare il conteggio delle righe della dichiarazione prescelta se la stored procedure e genera un errore se il conteggio delle righe è pari a zero. Non è un modo elegante per tirare fuori questo, ma non invierà la relazione perché l'errore si verifica sul lato T-SQL e SSRS non sarà in grado di rendere il rapporto.
declare @rows int
select @rows = -1
<select statement here>
select @rows = @@rowcount
if ( @rows < 1 )
begin
RAISERROR ('no rows returned', 11, 1 );
end