pilotées par les données du serveur SQL envoi arrêt de l'abonnement
-
29-09-2019 - |
Question
J'ai un rapport en cours d'exécution sur la vérification de toutes les heures pour les nouvelles commandes. Il travaille beaucoup cependant, je voudrais envoyer seulement le rapport s'il y a au moins un ordre. Si le rapport est vide - Je ne veux pas envoyer le rapport du tout
.Pour prolonger cela, je voudrais seulement envoyer le rapport s'il y a de nouvelles commandes.
Idées?
La solution
Il suffit d'ajouter une condition dans votre requête DDS pour vérifier le temps de commande. S'il y a des commandes dans la dernière heure de votre requête doit retourner votre jeu de résultats retour sinon rien.
Par exemple, dans votre requête ajouter la logique suivante
DECLARE @HoursAgo int
SELECT Top 1 @HoursAgo = DateDiff('hh',getdate(), OrderTime)
FROM Orders
ORDER BY OrderTime DESC
Dans ajoutez votre requête la clause suivante
WHERE @HoursAgo > 0
Vous pouvez également ajouter des contrôles supplémentaires pour vous assurer que l'ordre est de la journée.
Autres conseils
Il est une propriété de l'ensemble de données RDL appelé « NoRows » qui peut afficher un message personnalisé si l'ensemble de données n'a pas de lignes retournées. Il sera toujours envoyer le rapport vide, juste avec un message spécial.
Si vous voulez que l'abonnement à ne pas le feu au large du rapport alors la seule façon que je connaisse pour ce faire est de vérifier le nombre de lignes de l'instruction select si votre procédure stockée et renvoyer une erreur si le nombre de lignes est égal à zéro. Pas une façon élégante de retirer ceci, mais il ne sera pas envoyer le rapport parce que l'erreur se produit sur le côté T-SQL et SSRS ne sera pas en mesure de rendre le rapport.
declare @rows int
select @rows = -1
<select statement here>
select @rows = @@rowcount
if ( @rows < 1 )
begin
RAISERROR ('no rows returned', 11, 1 );
end