Question

Je migre des données à insérer à l'aide de procédures stockées existantes. Les procédures stockées ont des paramètres et une valeur de retour (à partir d'une instruction select) d'un identifiant pour la ligne insérée. Dans une commande OLE DB dans SSIS, je peux appeler la procédure stockée en transmettant les valeurs de colonne en tant que paramètres et j'utilise généralement les paramètres de sortie de la procédure stockée pour gérer & Quot; id & Quot; sortie; mais je ne suis pas sûr de savoir comment cela peut être géré avec des valeurs de retour lorsque la procédure utilise une sélection pour renvoyer la valeur id. Voici un exemple de ce que j'ai utilisé auparavant qui fonctionne mais je dois récupérer la valeur renvoyée par la sélection:

exec dbo.uspInsertContactAddress
@Address = ?,
@ContactID = ?,
@DeliveryMethodId = ?,
@ID = ? output,
@Version = ? output
Était-ce utile?

La solution

La façon dont j'ai trouvé que je pouvais le faire était en fait assez simple:

exec ? = dbo.StoredProc @param = ?, @param2 = ?

puis un @RETURN_VALUE apparaîtra sur les colonnes de destination disponibles

Autres conseils

N'utilisez pas les noms de variable dans la propriété SqlCommand, mais uniquement les points d'interrogation et les & "OUT &"; ou " OUTPUT " étiquette pour les paramètres de sortie.

L'astuce pour saisir la valeur du paramètre de sortie consiste à placer une transformation de colonne dérivée dans le pipeline avant la commande OLE DB afin d'introduire une colonne (mappée sur une variable SSIS) pour capturer le résultat de la procédure.

Voir Colonnes de transformation et d'identification de commandes OLEDB pour un bon aperçu avec les captures d'écran de la procédure à suivre. Voir également adaptateur de destination de la corbeille pour la destination de la corbeille utilisée dans le premier lien. C'est un outil pratique pour pouvoir déboguer des choses comme celle-ci.

Si la procédure stockée retourne un jeu de résultats, vous devez le capturer:

DECLARE @results TABLE (
    [ID] INT NOT NULL
)

INSERT @results ([ID])
EXEC dbo.uspInsertContactAddress @Address = ?, @ContactID = ?, @DeliveryMethodId = ?, @ID = ? output, @Version = ? output

SELECT * FROM @results 

Remarque: j'ai utilisé une variable TABLE. Vous devrez peut-être utiliser une table temporaire en fonction de votre version de SQL Server.

J'ai toujours utilisé le mappage de paramètres dans la tâche d'exécution SQL avec beaucoup de succès. L'instruction SQL est & Quot; EXEC nameofstoredproc?,? OUTPUT & Quot ;, avec les points d'interrogation spécifiant l'emplacement des paramètres et OUTPUT si le paramètre est une sortie.

Vous spécifiez les paramètres dans le mappage avec le nom de variable, la direction (entrée, sortie, ReturnValue) et le type de données appropriés. Étant donné que votre procédure stockée renvoie les données souhaitées via un jeu de résultats, spécifiez la direction dans laquelle les variables collecteront l'ID et la version sous la forme ReturnValue. Cela devrait fonctionner parfaitement pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top