Domanda

Sto migrando i dati che devono essere inseriti utilizzando le procedure memorizzate che già esistono. Le procedure memorizzate hanno parametri e un valore di ritorno (da un'istruzione select) di un ID per la riga inserita. All'interno di un comando OLE DB in SSIS, posso chiamare la procedura memorizzata passando i valori di colonna come parametri e di solito utilizzo i parametri di output sulla procedura memorizzata per gestire & Quot; id & Quot; produzione; ma non sono sicuro di come questo possa essere gestito con i valori di ritorno quando la procedura utilizza una selezione per restituire il valore ID. Ecco un esempio di quello che ho usato prima che funziona, ma ho bisogno di raccogliere il valore restituito dalla selezione:

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

Soluzione

Il modo in cui ho scoperto di poterlo fare è stato piuttosto semplice:

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

e quindi un @RETURN_VALUE verrà visualizzato nelle colonne di destinazione disponibili

Altri suggerimenti

Non usare i nomi delle variabili nella proprietà SqlCommand, solo i punti interrogativi e il " OUT " oppure " OUTPUT " etichetta per i parametri di output.

Il trucco per ottenere il valore del parametro di output è inserire una trasformazione di colonna derivata nella pipeline prima del comando OLE DB per introdurre una colonna (mappata su una variabile SSIS) per acquisire il risultato della procedura.

Vedi Colonne di trasformazione e identità OLEDB per una buona panoramica con le protezioni dello schermo su come eseguire questa operazione. Vedi anche Adattatore per la destinazione del cestino per la Destinazione del cestino utilizzata nel primo link. È uno strumento utile che è disponibile per il debug di cose come questa.

Se la procedura memorizzata restituisce un gruppo di risultati, è necessario acquisirlo:

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

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

SELECT * FROM @results 

Nota: ho usato una variabile TABELLA. Potrebbe essere necessario utilizzare una tabella temporanea a seconda della versione di SQL Server.

Ho sempre usato la mappatura dei parametri nell'attività Esegui SQL con molto successo. L'istruzione SQL è & Quot; EXEC nameofstoredproc?,? OUTPUT & Quot ;, con i punti interrogativi che specificano la posizione dei parametri e OUTPUT se il parametro è un output.

È possibile specificare i parametri nella mappatura con il nome della variabile, la direzione (input, output, ReturnValue) e il tipo di dati appropriati. Poiché il tuo proc memorizzato sta restituendo i dati desiderati tramite un set di risultati, specifica la direzione in cui le variabili raccolgono l'ID e la versione come ReturnValue. Dovrebbe funzionare bene per te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top