2010-05-28 7 views
1

Dans une tâche de flux de données, je peux glisser un nombre de lignes dans le flux de traitement et placer le compte dans une variable. Je peux plus tard utiliser cette variable pour effectuer conditionnellement d'autres travaux si le rowcount était> 0. Cela fonctionne bien pour moi, mais je n'ai pas de stratégie correspondante pour les tâches SQL attendues pour retourner une seule ligne. Dans ce cas, je retourne ces valeurs dans des variables. Si la recherche ne génère aucune ligne, la tâche SQL échoue lors de l'affectation de valeurs à ces variables. Je peux ramifier l'échec de ce composant, mais il y a un effet secondaire: si j'exécute le travail en tant qu'étape de travail de l'agent SQL Server, l'étape renvoie DTSER_FAILURE, ce qui entraîne l'échec de l'étape. Je peux dire à l'agent sql de ne pas tenir compte de l'échec de l'étape, mais je ne saurai pas si j'ai une erreur légitime dans cette étape. Cela semble plus difficile que cela devrait être. La seule stratégie à laquelle je peux penser est d'exécuter la même requête avec un agrégat count (*) et de tester si cela retourne un nombre> 0 et si c'est le cas, réexécutez la requête sans compter. C'est moche parce que j'ai la même requête à deux endroits que je dois synchroniser.Comment gérer les résultats NULL dans SQL Tâches qui retournent des lignes uniques dans SSIS 2005?

Y a-t-il un meilleur moyen?

Répondre

0

Dans cette même condition, vous pouvez avoir une logique supplémentaire (& & ou ||). Je prendrais une des variables pour votre instruction simple et dirais quelque chose à l'effet:

Si @User :: rowcount> 0 || @User: single_record_var! = Par défaut

Cela devrait aider.

0

Quel type d'instruction SQL? Pouvez-vous le changer pour toujours retourner une seule ligne avec toutes les valeurs nulles au lieu de pas de lignes?

Qu'est-ce qui l'empêche de retourner plus d'une ligne? Le paquet échouerait s'il retournait plus d'une ligne, non?

Vous pouvez également le modifier pour appeler une procédure stockée, puis appeler la procédure stockée à deux endroits sans duplication de code. Vous pouvez également le modifier pour qu'il soit une vue ou une fonction définie par l'utilisateur (si des paramètres sont nécessaires), SELECT COUNT(*) FROM udf() pour vérifier s'il existe des données, SELECT * FROM udf() pour obtenir la ligne.

Questions connexes