2009-01-28 10 views
7

Ich migriere Daten, die mit bereits vorhandenen gespeicherten Prozeduren eingefügt werden müssen. Die gespeicherten Prozeduren haben Parameter und einen Rückgabewert (aus einer SELECT-Anweisung) einer ID für die eingefügte Zeile. Innerhalb eines OLE DB-Befehls in SSIS kann ich die gespeicherte Prozedur, die Spaltenwerte übergibt, als Parameter aufrufen, und normalerweise verwende ich Ausgabeparameter für die gespeicherte Prozedur, um "id" -Ausgabe zu verarbeiten. aber ich bin mir nicht sicher, wie dies mit Rückgabewerten gehandhabt werden kann, wenn die Prozedur eine Auswahl verwendet, um den ID-Wert zurückzugeben. Hier ist ein Beispiel dafür, was ich verwendet habe, vor dem funktioniert, aber ich brauche, um den Wert zu holen aus der Auswahl zurückgegeben:SSIS-Rückgabewert der Stored Procedure in einem OLE DB-Befehl

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

Antwort

12

Die Art, wie ich fand, ich könnte dies tun, die eigentlich ganz einfach war:

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

und dann ein @ RETURN_VALUE auf den verfügbaren Zielspalten

6

Verwenden Sie die Variablennamen nicht in der SqlCommand-Eigenschaft, nur die Fragezeichen und die "OUT" oder "OUTPUT" Bezeichnung für die Ausgangsparameter. Der Trick zum Ergreifen des Ausgabeparameterwerts besteht darin, eine abgeleitete Spaltenumwandlung in die Pipeline vor dem OLE DB-Befehl einzufügen, um eine Spalte (die einer SSIS-Variablen zugeordnet wird) einzufügen, um das Prozessergebnis zu erfassen.

Siehe OLEDB Command Transformation And Identity Columns für einen guten Überblick mit Bildschirmkappen, wie dies zu tun ist. Siehe auch für das Papierkorbziel, das im ersten Link verwendet wird. Es ist ein praktisches Werkzeug, um solche Dinge zu debuggen.

+0

Danke für die Antwort erscheinen wird, obwohl vielleicht ich didn‘ Ich erkläre in meiner Frage genau, was ich tun muss. Der obige Code, den ich verwendet habe, funktioniert und ich kann Werte greifen, wenn die Prozedur einen Ausgabeparameter hat. Das Problem besteht darin, dass die Prozeduren, die für diese Datenbank verwendet werden, nur eine Auswahl aufrufen, um einen Wert zu erhalten. – bobwah

+0

Es tut mir leid, ich bin mir nicht sicher, ob ich bekomme, was das Problem ist. Ist es so, dass Sie das Ergebnis der Auswahl nicht über einen Ausgabeparameter übergeben und stattdessen eine Möglichkeit benötigen, die Ergebnismenge des Procs zu erfassen? –

0

Ich habe die Parameterzuordnung innerhalb der Task SQL ausführen immer mit sehr viel Erfolg verwendet. Die SQL-Anweisung lautet "EXEC nameofstoredproc?,? OUTPUT", wobei die Fragezeichen den Speicherort der Parameter und OUTPUT angeben, wenn der Parameter eine Ausgabe ist.

Sie geben die Parameter im Mapping mit dem entsprechenden Variablennamen, der Richtung (Eingabe, Ausgabe, ReturnValue) und dem Datentyp an. Da Ihr gespeicherter Prozess die gewünschten Daten über eine Ergebnismenge zurückgibt, geben Sie die Richtung für die Variablen an, um ID und Version als Rückgabewert zu erfassen. Es sollte für Sie gut funktionieren.

1

Wenn die gespeicherte Prozedur eine Ergebnismenge zurückgibt, dann müssen Sie es erfassen:

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

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

SELECT * FROM @results 

Anmerkung: Ich habe eine Tabelle Variable. Abhängig von Ihrer SQL Server-Version müssen Sie möglicherweise eine temporäre Tabelle verwenden.