Fügt eine einzelne Zeile ein und gibt ihren Primärschlüssel zurück

8

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%     
Brad Urani 18.01.2012, 17:47
quelle

3 Antworten

17

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.

Option 1

SQL-Task ausführen

  • Registerkarte Allgemein

Ergebnismenge: Keine

SQL

%Vor%
  • Registerkarte Parameterzuordnung

Variablenname: Benutzer :: tablePk

Richtung: Ausgabe

Datentyp: Lang

Parametername: 0

Parametergröße: -1

Option 2

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%

Option 3

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.

    
billinkc 18.01.2012, 21:44
quelle
5

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.

    
Meff 19.01.2012 15:09
quelle
0

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%
  • Ersetzen Sie in dieser Anweisung Id durch den Namen Ihrer Identitätsspalte.
  • Verwenden Sie "Single row" als Resultset-Typ.
  • Keine Parameterzuordnungen
  • Fügen Sie dies dem Result Set hinzu Registerkarte: Ergebnis Name: 0 (bedeutet die erste Spalte) und wählen Sie Ihren Variablennamen z. User::tablePk (Variablentyp: Int32)
H B 04.04.2018 13:59
quelle

Tags und Links