J'essaie d'obtenir la valeur d'une procédure stockée dans une variable SSIS, puis de tester pour voir si deux tâches SSIS peuvent fonctionner si j'ajoute une expression. Donc, pour un exemple, j'essaie d'utiliser cette procédure stockée:
Peut-être que je configure même les propriétés de la variable SSIS de manière totalement incorrecte, car je ne suis pas sûr non plus si je fais cela de la bonne manière pour que la valeur de proc stockée soit importée dans une variable SSIS. S'il vous plaît, dites-moi si vous avez besoin de plus de captures d'écran de quoi que ce soit d'autre.
Voici l'exemple de tâche:
Et voici le screencap de l'éditeur de contraintes de précédence:
Et voici les propriétés de la première tâche:
Je veux qu'il avance (ou échoue) en fonction de cette condition. Mais quand je le teste, le processus passe de la première tâche à la seconde, et ne me montre que "100% terminé" pour la première tâche et rien pour savoir s'il a vérifié que cette expression est vraie ou non. Comment puis-je faire une telle chose et qu'est-ce qui ne va pas? J'ai une variable dans SSIS appelée 'orderCount' pour obtenir la valeur du proc stocké.
la source
@[User::orderCount]
Result Set
page. simple-talk.com/sql/ssis/…@[User::orderCount]<5?(dt_bool)1:(dt_bool)0
. N'oubliez pas de poster les résultats sur ce sujet en cas de succès. GL!Réponses:
Vous avez deux choix pour que cela fonctionne. Vous pouvez soit utiliser un jeu de résultats unique, soit utiliser le paramètre OUTPUT. Vous n'utilisez actuellement ni l'un ni l'autre correctement.
Paramètre OUTPUT
Votre procédure stockée est définie comme ayant un paramètre de
@OrderCount
avec une direction deOUTPUT
Si vous vouliez utiliser la procédure stockée dans un outil, SSMS, .NET, peu importe, cela ressemblerait à quelque chose comme
Il est valide d'exécuter ce qui précède sans spécifier,
OUTPUT
mais regardez la valeur de @orderCount. Il passe de 1435 à 0.Il en va de même lorsque vous utilisez la tâche d'exécution SQL dans SSIS. Vous devez spécifier que le paramètre est sur OUTPUT et également le spécifier dans l'onglet Mappages de paramètres.
Spécifiez également la variable que vous souhaitez mapper et utilisez la direction OUTPUT à cet endroit. Ici, j'ai mappé le résultat dans une variable SSIS de type Int32 appelée
orderCount
Ensemble de résultats unique
Vous avez la première partie de ce correct - vous avez spécifié que le jeu de résultats est Single Row.
Vous remarquerez que j'utilise
EXECUTE dbo.TestStoredProcSSVariable ?
car vous devez spécifier une valeur d'entrée ou l'appel proc se cassera (au moins tel que vous l'avez défini). Vous auriez pu coder en dur une valeur au lieu de?
similaire0
Ensuite, dans l'onglet Jeu de résultats, ici, je mappe la première colonne (ordinal nul) à une variable appelée
orderCountb
Si vous exécutez la procédure stockée fournie, vous n'obtiendrez pas de valeur dans orderCountb. Pourquoi? Parce que vous ne renvoyez rien de l'appel de procédure stockée. J'ai ajouté une déclaration finale dans la procédure stockée de
Fais le toi-même
Vous pouvez explorer l'une ou l'autre approche en utilisant le biml suivant. Qu'est-ce que le biml? Le langage de balisage de Business Intelligence est le système d'exploitation pour BI. Ce qui vous intéresse, c'est qu'il vous permettra de transformer du XML en un package SSIS. Il vous suffit de télécharger et d'installer l'addon gratuit BIDS Helper
Après avoir installé BIDS Helper,
Data Source
à jour le sur un vrai serveur etProvider
alignez-le sur votre version SSIS. En regardant votre capture d'écran, ce sera probablement SQLNCLI10.1Bimlscript.biml
Profitez du package SSIS suivant
la source