In SSIS, wie benutze ich den Task SQL ausführen, um eine einzelne Zeile ohne Parameter einzufügen und den Primärschlüssel zurück zu bekommen, damit ich ihn auf Benutzervariable setzen kann? Meine Einfügeabfrage ist einfach:
%Vor%Gute Frage, nahm mir ein paar Versuche, es herauszufinden. Deklarieren Sie eine SSIS-Variable vom Typ Int32 (es sei denn, Sie benötigen eine Bemaßung für einen Bigint oder einen numerischen Wert). Ich habe tablePk als meine gewählt.
SQL-Task ausführen
Ergebnismenge: Keine
SQL
%Vor%Variablenname: Benutzer :: tablePk
Richtung: Ausgabe
Datentyp: Lang
Parametername: 0
Parametergröße: -1
Dies war die ursprüngliche Lösung, da ich nicht herausfinden konnte, wie man den Platzhalter ?
in einer normalen -Abfrage erhält. Es könnte nicht so einfach sein wie das, was ich oben hatte, außer es war.
Der einzige Unterschied ist die verwendete Abfrage
SQL
%Vor% Wenn Sie einen Datenfluss verwenden, skizziere ich einen Ansatz für Hinzufügen des Resultsets aus einer T-SQL-Anweisung zu Ein Datenfluss? Kurz gesagt, Sie müssen vor einem OLE DB-Befehl eine Spalte in den Datenfluss einfügen. Innerhalb des OLE DB-Befehls ordnen Sie diese leere Spalte in einen OUTPUT
-Parameter Ihrer gespeicherten Prozedur ein, und wenn die gespeicherte Prozedur ausgelöst wird, wird die Spalte durch den Wert der Prozedur ersetzt.
Alternativ zur bilinkc-Version, ohne Parameter:
SQL-Task ausführen
Registerkarte Allgemein ResultSet: Einzelne Zeile
SQL
%Vor%Geben Sie in der Zuordnung der einreihigen Ergebnismenge LastId in das Feld für den Ergebnisnamen ein und ordnen Sie diese der Variablen zu.
Kann mit einem einzigen Ausgabeparameter (bilinkc's Version) marginal schneller sein, hängt davon ab, wie SSIS es unter der Decke macht und ob es einen vollständigen Datenreader im Vergleich zu einem einzelnen sp_ExecuteSQL-Aufruf mit Ausgabeparameter erstellt.
Hier ist eine andere Alternative, die ich denke, ist sehr sauber. Es verwendet OUTPUT-Syntax und die Ergebnismenge statt Parameter Mapping, die weniger Konfiguration erfordert.
%Vor%Id
durch den Namen Ihrer Identitätsspalte. 0
(bedeutet die erste Spalte) und wählen Sie Ihren Variablennamen z.
User::tablePk
(Variablentyp: Int32) Tags und Links ssis