4
votes

Comment utiliser une valeur de variable créée dans une tâche d'exécution SQL dans l'éditeur de contraintes de priorité?

 entrez la description de l'image ici Je dois exécuter n-multiple Exécuter la tâche SQL en fonction de la valeur de la variable n-multiple (isnull true ou false). Cette variable est créée dans un script ssms dans la tâche d'exécution SQL précédente (QUERY CONDITIONNELLE). Comment puis-je générer la valeur de la variable du script ssms vers l'expression conditionnelle dans ssis?

mes deux variables sont @beneficiary et @gempar . Ils stockent soit une valeur de type date, soit une valeur nulle.

 entrez la description de l'image ici


4 commentaires

Je ne sais pas vraiment ce que vous voulez dire ici, mais vous pouvez capturer la sortie d'une instruction SELECT dans une tâche d'exécution T-SQL my en utilisant le paramètre ResultSet dans le volet Général, puis en mappant les colonnes individuelles (si vous utilisez une seule ligne) ou l'objet de l'ensemble de données (si vous utilisez l'ensemble de résultats complet) à une variable dans le volet Ensemble de résultats . Ou, si vous utilisez une procédure stockée avec des paramètres OUTPUT , vous les mappez dans le volet Parameter Mapping (sans surprise).


Par procédure stockée, voulez-vous dire une connexion de fichier? Parce que c'est ce que j'utilise.


Non, par procédure stockée, j'entends l'objet SQL. Vous utilisez une tâche d'exécution T-SQL; vous n'interrogez pas un fichier ...


Les images de code ne sont pas très utiles pour les utilisateurs, cependant, dans votre SQL, vous n'avez aucun paramètre de sortie. Comme je l'ai mentionné, les paramètres OUTPUT font partie d'une procédure stockée; vous ne pouvez pas les avoir dans le cadre d'une instruction en ligne. Si vous souhaitez les utiliser, vous devrez convertir votre SQL en une procédure stockée.


3 Réponses :


1
votes

Vous pouvez spécifier un ResultSet dans la tâche SQL d'exécution et mapper le résultat à une variable en suivant ces étapes:

  1. À la fin de l'instruction SQL, ajoutez la ligne suivante

    0 >> benefeciary
    1 >> gempar
    
  2. Dans la tâche d'exécution SQL, remplacez l'option ResultSet par single Row

  3. Aller à l'onglet Ensemble de résultats
  4. Mappez l'index de la colonne (commençant par 0 ) à la variable appropriée

    SELECT @benefeciary as benefeciary, @gempar as gempar
    

Pour plus de détails, il existe de nombreux articles décrivant ce processus:

  1. Principes de base de SSIS: utilisation de la tâche d'exécution SQL pour générer des ensembles de résultats
  2. Mapper les ensembles de résultats aux variables dans une tâche d'exécution SQL
  3. Comment définir et utiliser des variables dans la tâche d'exécution SQL SSIS


4 commentaires

Les réponses aux liens uniquement ne sont généralement pas bien reçues sur Stack Overflow; ils attirent souvent des votes vers le bas, les liens peuvent devenir morts (les rendant inutiles pour les futurs lecteurs), et il existe une option de révision spécifique pour les supprimer dans la file d'attente de mauvaise qualité. Pour améliorer votre réponse, je vous suggère d'ajouter les parties pertinentes des articles que vous avez liés, sinon c'est probablement mieux comme commentaire.


@Larnu pas de problème, je fournirai plus de détails


Il n'est pas possible de cliquer sur le bouton Ajouter dans la section Ensemble de résultats. Peut-être parce que le script est une connexion de fichier?


@BoelsMaxence vérifiez que dans l'onglet Général, l'option Ensemble de résultats est définie sur Une seule ligne .



1
votes

Votre tâche de requête conditionnelle doit avoir un "ensemble de résultats" défini sur une "ligne unique", comme sur une capture d'écran:

 entrez la description de l'image ici

Ensuite, affectez simplement vos variables aux colonnes de sortie:

 entrez la description de l'image ici

Si votre requête renvoie deux valeurs, vous pouvez utiliser des positions ordinales, p>

donc ResultName = 0, peut être mappé à un @beneficiary et ResultName 1 à @gempar

Plus de détails: Principes de base de SSIS: utilisation de la tâche d'exécution SQL pour générer des ensembles de résultats


Mise à jour: Le script utilisé dans la tâche T-SQL doit renvoyer des valeurs via SELECT, mais pas via PRINT:

--SOME SELECTs..
..
SELECT @benefeciary, @gempar


7 commentaires

Je ne peux pas cliquer sur le bouton Ajouter dans la section Ensemble de résultats. J'ai mis à jour la question avec le SQL T-Script qui est placé comme connexion de fichier dans la tâche d'exécution SQL.


@BoelsMaxence, réponse mise à jour, vous utilisez PRINT, ce devrait être SELECT .. Les instructions Print sont ignorées par SSIS ..


J'ai supprimé l'impression du script sql


Ajoutez simplement ceci comme dernière ligne:


Dois-je utiliser le mappage de paramètres ou l'ensemble de résultats?


@BoelsMaxence ResultSet


Vous n'avez pas besoin dans ce cas de mappage de paramètres, mais uniquement d'un jeu de résultats. Veuillez vérifier ma réponse ci-dessus, il y a un SELECT que vous devez inclure comme dernière ligne votre script SQL



1
votes

En plus de mappez le jeu de résultats à la variable , vous devrez peut-être également définir le résultat de l'exécution de la tâche sur la variable en utilisant ExecValueVariable .

Ci-joint un de mes packages SSIS avec une variable nommée HasRecord. Cliquez sur Exécuter la tâche SQL et définissez ExecValueVariable sur la variable souhaitée, User :: HasRecord .

 entrez la description de l'image ici

 entrez la description de l'image ici


0 commentaires