19

Ich versuche, ein SSIS-Paket zu erstellen, das Daten aus einer Tabelle abfragt und mit jeder Zeile eine gespeicherte Prozedur in einer anderen Datenbank aufruft.Wie rufen Sie eine gespeicherte Prozedur in SSIS auf?

In meinem alten DTS-Paket, tat ich dies:

EXEC myStoredProcedure ?, ?, ? 

... und dann kartiert ich die Parameter. In SSIS kann ich jedoch nicht herausfinden, wie das funktioniert.

Ich habe eine Datenflusstask, die zuerst eine Abfrage für die Daten ausführt. Er übergibt die Daten an ein OLE DB-Ziel. Ich setze den Datenzugriffsmodus auf "SQL-Befehl", aber wenn ich versuche, die obige SQL einzugeben, erhalte ich "Ungültige Parameteranzahl", wenn er das SQL analysiert. Ich kann nicht zum Bildschirm "Mappings" gelangen. Irgendwelche Ideen?

+1

Warum scheint so eine einfache Aufgabe mit MS 'Data Transfer Utilities ??? Dies war in DTS einfach zu erledigen, vorausgesetzt, es hat Zeit gebraucht, um nutzlose Abbildungen zu erstellen. –

+0

Ich bin mir sicher, dass Sie dies auf dem 'Datenfluss' Level tun können, in der Tat bin ich sicher, dass ich es getan habe, aber ich kann mich nicht erinnern, wie. Wie sonst sollte man zum Beispiel einen INSERT-Prozess für fehlgeschlagene Lookups ausführen? –

Antwort

13

im Datenfluss, die OLE DB Command verwendet werden kann, eine SQL-Anweisung für jede Zeile in einem Datenfluß auszuführen - (MSDN documentation)

Alternativ Sie die Quelle Ergebnis in einer Variablen vom Datentyp Objekt gesetzt speichern und Verwenden Sie einen Foreach Loop Container im Kontrollfluss (Beispiel here).

+0

Ich denke, das funktioniert, aber ich bekomme einen Unicode-Konvertierungsfehler ... und ich bin mir nicht sicher, wie ich das beheben soll. –

+0

Schwierig, ohne ein bisschen mehr Detail sicher zu sein. Nimmt Ihr SP char oder varchar Parameter? –

+0

... das sollte char und/oder varchar Parameter sein –

7

Sie müssen einen SQL-Task ausführen. Im Abschnitt SQLStatement können Sie den Code zum Ausführen der gespeicherten Prozedur hinzufügen.

Um Parameter zu übergeben, verwenden Sie die? Syntax und geben Sie die Parameter im Bereich "Parameter Mapping" an.

Ein gutes Beispiel kann here gefunden werden.

+0

Wie übertrage ich die Daten in den SQL-Task? Ich sehe keine nützlichen Parameter im Parameterbereich. Nur "System :: xxxxx" -Parameter. –

+0

Dieses Beispiel hilft mir nicht, da es nur 2 spezifische Szenarien gibt. Insbesondere versuche ich, eine SELECT-Anweisung auszuführen und jede Zeile in eine gespeicherte Prozedur auf einem anderen Server zu übergeben. Weißt du wie das geht? –

+0

^Es funktioniert. Sie müssen Ihre eigenen Variablen definieren und nicht die Variablen auf Systemebene verwenden. Sie sollten einen "SQL-Task ausführen" im Abschnitt "Steuerungsfluss" Ihres Pakets verwenden. Rufen Sie den Variablen-Editor auf und fügen Sie in der oberen linken Ecke Ihre eigenen USER-Level-Variablen hinzu. – D3vtr0n

Verwandte Themen