19

J'essaie de créer un package SSIS qui interroge les données d'une table et appelle une procédure stockée dans une autre base de données avec chaque ligne.Comment appelez-vous une procédure stockée dans SSIS?

Dans mon ancien package DTS, je faisais ceci:

EXEC myStoredProcedure ?, ?, ? 

... et puis je cartographié les paramètres. Cependant, dans SSIS, je ne peux pas comprendre comment faire ce travail.

J'ai une tâche de flux de données, qui exécute d'abord une requête pour les données. Il transmet les données à une destination OLE DB. J'ai placé le mode d'accès de données à la "commande de SQL", mais quand j'essaye de mettre dans le SQL ci-dessus, j'obtiens "le compte de paramètre invalide" quand il analyse le SQL. Je ne peux pas accéder à l'écran Mappages. Des idées?

+1

Pourquoi une tâche aussi simple semble-t-elle si complexe avec MS 'Data Transfer Utilities ??? C'était facile à faire en DTS, étant donné qu'il a fallu du temps pour configurer des mappages inutiles. –

+0

Je suis sûr que vous pouvez le faire au niveau du 'flux de données', en fait je suis sûr que je l'ai fait mais je ne me souviens plus comment. Sinon, comment devez-vous, par exemple, exécuter un proc INSERT pour les recherches échouées? –

Répondre

13

Dans le flux de données, l'OLE DB Command peut être utilisé pour exécuter une instruction SQL pour chaque ligne dans un flux de données - (MSDN documentation)

Vous pouvez stocker le résultat de la source située dans une variable d'objet de type de données et utilisez un conteneur Foreach Loop dans le flux de contrôle (exemple here).

+0

Je pense que cela fonctionne, mais je reçois une erreur de conversion Unicode ... et je ne suis pas vraiment sûr de savoir comment y remédier. –

+0

Difficile d'être certain sans un peu plus de détails. Est-ce que votre SP prend des paramètres char ou varchar? –

+0

... qui devrait être des paramètres char et/ou varchar –

7

Vous devrez utiliser une tâche SQL d'exécution. Dans la section SQLStatement, vous pouvez ajouter le code pour exécuter la procédure stockée.

Pour passer des paramètres, utilisez le? syntaxe et spécifiez les paramètres dans la section "Mappage des paramètres".

Un bon exemple peut être trouvé here.

+0

Alors, comment transmettre les données dans la tâche SQL d'exécution? Je ne vois aucun paramètre utile dans la section des paramètres. Seuls les paramètres "System :: xxxxx". –

+0

Cet exemple ne m'aide pas, car il n'y a que 2 scénarios spécifiques. Plus précisément, j'essaie d'exécuter une instruction select et de passer chaque ligne dans une procédure stockée dans un autre serveur. Sais-tu comment faire cela? –

+0

^Cela fonctionne. Vous devez définir vos variables OWN, n'utilisez pas les variables de niveau SYSTEM. Vous devez utiliser une "Exécuter une tâche SQL" dans la section Flux de contrôle de votre package. Apportez l'éditeur Variables et, dans le coin supérieur gauche, ajoutez vos propres variables de niveau USER. – D3vtr0n

Questions connexes