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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top