2009-01-28 16 views
7

Je migre des données qui doivent être insérées à l'aide de procédures stockées qui existent déjà. 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 passant les valeurs de colonne en tant que paramètres et j'utilise généralement les paramètres de sortie sur la procédure stockée pour gérer la sortie "id"; mais je ne sais pas comment cela peut être géré avec des valeurs de retour lorsque la procédure utilise un select pour retourner la valeur de l'ID. Voici un exemple de ce que je l'ai utilisé avant qui fonctionne, mais je dois récupérer la valeur renvoyée par la sélection:Valeur de retour SSIS de la procédure stockée dans une commande OLE DB

exec dbo.uspInsertContactAddress 
@Address = ?, 
@ContactID = ?, 
@DeliveryMethodId = ?, 
@ID = ? output, 
@Version = ? output 

Répondre

12

La manière que je trouvais que je pouvais faire ce qui était en fait assez simple:

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

puis un @RETURN_VALUE apparaîtra sur la destination disponibles Colonnes

6

Ne pas utiliser les noms de variables dans la propriété SqlCommand, seulement les points d'interrogation et la Étiquette "OUT" ou "OUTPUT" pour les paramètres de sortie. L'astuce pour saisir la valeur du paramètre de sortie est de placer une transformation de colonne dérivée dans le pipeline en amont de la commande OLE DB pour introduire une colonne (mappée à une variable SSIS) pour capturer le résultat de la procédure. Voir OLEDB Command Transformation And Identity Columns pour une bonne vue d'ensemble avec des captures d'écran. Voir également Trash Destination Adapter pour la destination de la corbeille utilisée dans le premier lien. C'est un outil pratique à utiliser pour déboguer des choses comme ça.

+0

Merci pour la réponse, bien que peut-être je n » J'explique dans ma question exactement ce que je dois faire. Le code ci-dessus que j'ai utilisé fonctionne et je peux saisir des valeurs si la procédure a un paramètre de sortie. Le problème est que les procédures utilisées pour cette base de données appelle simplement un select pour obtenir une valeur. – bobwah

+0

Je suis désolé, je ne suis pas sûr d'avoir compris le problème. Est-ce que vous ne passez pas le résultat du select out via un paramètre de sortie et vous avez plutôt besoin d'un moyen de saisir le jeu de résultats du proc? –

0

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 "EXEC nameofstoredproc ?,? OUTPUT", 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 approprié, la direction (entrée, sortie, ReturnValue) et le type de données. Étant donné que votre proc stocké renvoie les données que vous souhaitez via un jeu de résultats, spécifiez la direction dans laquelle les variables collectent l'ID et la version en tant que ReturnValue. Cela devrait fonctionner très bien pour vous.

1

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

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

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

SELECT * FROM @results 

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

Questions connexes