Ich versuche, den Wert einer gespeicherten Prozedur in eine SSIS-Variable zu übertragen, und teste dann, ob zwei SSIS-Aufgaben funktionieren können, wenn ich einen Ausdruck hinzufüge. Als Beispiel versuche ich, diese gespeicherte Prozedur zu verwenden:
Vielleicht richte ich die Eigenschaften der SSIS-Variablen sogar völlig falsch ein, weil ich auch nicht sicher bin, ob ich dies richtig mache, damit der gespeicherte Prozesswert in eine SSIS-Variable importiert wird. Bitte sagen Sie mir, wenn Sie weitere Screencaps von etwas anderem benötigen.
Hier ist das Aufgabenbeispiel:
Und hier ist die Bildschirmabdeckung des Precedence Constraint Editor:
Und hier sind die Eigenschaften für die erste Aufgabe:
Ich möchte, dass es basierend auf dieser Bedingung vorwärts geht (oder fehlschlägt). Aber wenn ich es teste, fließt der Prozess unabhängig von der ersten Aufgabe zur zweiten und zeigt mir nur "100% abgeschlossen" für die erste Aufgabe und nichts darüber, ob dieser Ausdruck auf wahr überprüft wurde oder nicht. Wie kann ich so etwas machen und was läuft falsch? Ich habe eine Variable in SSIS namens 'orderCount', um den Wert aus dem gespeicherten Prozess abzurufen.
quelle
@[User::orderCount]
Result Set
Seite. simple-talk.com/sql/ssis/…@[User::orderCount]<5?(dt_bool)1:(dt_bool)0
. Vergessen Sie nicht, die Ergebnisse in diesem Thread zu veröffentlichen, wenn dies erfolgreich ist. GL!Antworten:
Sie haben zwei Möglichkeiten, damit dies funktioniert. Sie können entweder eine einzelne Ergebnismenge oder den Parameter OUTPUT verwenden. Sie verwenden derzeit keine richtig.
OUTPUT-Parameter
Ihre gespeicherte Prozedur hat einen Parameter
@OrderCount
mit der RichtungOUTPUT
Wenn Sie die gespeicherte Prozedur in einem Tool, SSMS, .NET usw. verwenden möchten, sieht sie ungefähr so aus
Es ist gültig, die obigen
OUTPUT
Schritte ohne Angabe auszuführen, aber den Wert von @orderCount zu überprüfen. Es ändert sich von 1435 auf 0.Gleiches gilt, wenn Sie die Execute SQL Task in SSIS verwenden. Sie müssen angeben, dass sich der Parameter in OUTPUT befindet, und ihn auch auf der Registerkarte Parameterzuordnungen angeben.
Geben Sie auch die Variable an, die Sie zuordnen möchten, und verwenden Sie dort die OUTPUT-Richtung. Hier habe ich das Ergebnis einer SSIS-Variablen vom Typ Int32 zugeordnet, die aufgerufen wird
orderCount
Einzelergebnissatz
Sie haben den ersten Teil davon richtig - Sie haben angegeben, dass die Ergebnismenge eine einzelne Zeile ist.
Sie werden feststellen, dass ich verwende,
EXECUTE dbo.TestStoredProcSSVariable ?
da Sie einen Eingabewert angeben müssen, sonst wird der Proc-Aufruf unterbrochen (zumindest so, wie Sie ihn definiert haben). Sie hätten einen Wert anstelle von?
ähnlichem hart codieren können0
Dann ordne ich hier auf der Registerkarte Ergebnismenge die erste Spalte (nullte Ordnungszahl) einer Variablen mit dem Namen zu
orderCountb
Wenn Sie die bereitgestellte gespeicherte Prozedur ausführen, erhalten Sie in orderCountb keinen Wert. Warum? Weil Sie nichts vom Aufruf der gespeicherten Prozedur zurückgeben. Ich habe eine abschließende Anweisung in die gespeicherte Prozedur von eingefügt
Mach es selbst
Sie können beide Ansätze mit dem folgenden Biml untersuchen. Was ist biml? Die Business Intelligence Markup Language ist das Betriebssystem für BI. Sie interessieren sich dafür, dass Sie damit XML in ein SSIS-Paket umwandeln können. Sie müssen lediglich das kostenlose Addon BIDS Helper herunterladen und installieren
Nach der Installation von BIDS Helper
Data Source
auf einen realen Server undProvider
richten Sie sie an Ihrer SSIS-Version aus. Wenn Sie sich Ihren Screenshot ansehen, ist dies wahrscheinlich SQLNCLI10.1Bimlscript.biml
Genießen Sie das folgende SSIS-Paket
quelle