Frage

I-Daten am migrieren, die unter Verwendung von gespeicherten Prozeduren werden muss eingefügt, die bereits existieren. Die gespeicherten Prozeduren haben Parameter und einen Rückgabewert (von einer Anweisung SELECT) ein ID für die Zeile eingefügt. Innerhalb einer OLE DB-Befehl in SSIS, kann ich die gespeicherten Prozedur übergeben Spaltenwerte als die Parameter und rufen I in der Regel auf Ausgabeparameter der gespeicherten Prozedur verwenden, um „id“ -Ausgang zu behandeln; aber ich bin nicht sicher, wie dies mit Rückgabewert behandelt werden, wenn das Verfahren eine Auswahl verwendet den ID-Wert zurückzukehren. Dies ist ein Beispiel dafür, was ich verwendet habe, vor dem funktioniert, aber ich brauche, um den Wert zu holen, das von dem select:

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

Lösung

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

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

und dann ein @ RETURN_VALUE auf den verfügbaren Zielspalten erscheint

Andere Tipps

Verwenden Sie nicht die Variablennamen in der SqlCommand-Eigenschaft, nur die Fragezeichen und das „OUT“ oder „OUTPUT“ Label für die Ausgangsparameter.

Der Trick des Ausgangsparameterwertes zum Grabben ist eine abgeleitete Spaltentransformation in der Pipeline setzen vor dem OLE DB Befehl eine Säule einzuführen (abgebildet auf eine variable SSIS), um das Verfahren Ergebnis zu erfassen.

Siehe OLEDB Command Transformation und Identität Spalten eine gute Übersicht mit Schirmkappen, wie dies zu tun. Siehe auch Trash Destination Adapter für die Trash Destination in der ersten Verbindung verwendet. Es ist ein praktisches Tool für das Debuggen Dinge wie diese zur Verfügung zu haben.

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 

Hinweis: Ich habe eine Tabelle Variable. Sie können eine temporäre Tabelle in Abhängigkeit von der SQL Server-Version verwenden müssen.

Ich habe immer verwendet, um den Parameter-Mapping in der Task SQL ausführen mit viel Erfolg. Die SQL-Anweisung ist „EXEC nameofstoredproc?,? OUTPUT“, wobei die Fragezeichen die Position der Angabe von Parametern und OUTPUT, wenn der Parameter ein Ausgang ist.

Sie geben die Parameter in der Zuordnung mit dem entsprechenden Variablennamen, Richtung (Eingang, Ausgang, Return) und Datentyp. Da Ihre gespeicherte Prozedur die Daten zurückgibt Sie über eine Ergebnismenge möchten, dann geben Sie die Richtung für die Variablen die ID und Version als Return zu sammeln. Es sollte für Sie gut funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top