2016-08-29 2 views
2

Ich muss den Wert einer Variablen in einem untergeordneten Paket auf das übergeordnete Paket ziehen. Ich kann das nicht zur Arbeit bringen.SSIS 2012 übergeben Variable von Kind zu Eltern-Paket

Ich kann Variablen von Eltern zu Kind unter Verwendung von Paketkonfigurationen festlegen, aber ich finde keinen Weg, Kind Wert in Eltern zu bekommen. Ich versuchte, den gleichen Prozess zu verwenden, den ich verwendete, um Wert vom Elternteil im Kind zu setzen, aber es funktioniert nicht.

Die gepostete mögliche Lösung von einem anderen Thema hat das Problem nicht gelöst, es hat nur gesagt, dass es möglicherweise nicht möglich ist. Der Beitrag war von 2013 und viele Dinge ändern sich, ich wollte sehen, ob das jetzt möglich ist (ohne einen Wert für einen externen Tisch oder ähnliches zu speichern).

+1

Mögliche Duplikat [SSIS 2012 Pass Werte von Kind Paket Eltern mit Projektbereitstellungsmodell] (http: // Stackoverflow. com/questions/20288766/ssis-2012-pass-values-from-child-package-zu-parent-with-project-deployment-model) – mxix

+0

Die gepostete mögliche Lösung von einem anderen Thema hat das Problem nicht gelöst es hat es gerade gesagt nicht möglich sein. Der Beitrag war von 2013 und viele Dinge ändern sich, ich wollte sehen, ob das jetzt möglich ist (ohne einen Wert für einen externen Tisch oder ähnliches zu speichern). – Brad

+2

werfen Sie einen Blick auf die anderen Antworten. Die richtige Antwort ist, dass eine direkte Bindung nicht möglich ist. Aber es scheint einen Weg zu geben;) [Script] (http://stackoverflow.com/a/24816078/3665707) ODER [Variablen] (http://stackoverflow.com/a/23121337/3665707) – mxix

Antwort

3

Dieses untergeordnete Paket wird an vielen Stellen verwendet, von denen viele nicht die übergeordnete Variable haben, die ich einstellen möchte (sie würde in der übergeordneten Variablen nicht existieren). Das Standardskript im obigen Beitrag würde also nicht funktionieren. Ich hatte auf einen einfachen Rückgabevariablenwert gehofft.

Mit dem obigen Beitrag als Ausgangspunkt habe ich den C# -Code aktualisiert, um zu prüfen, ob die Variable, die ich im übergeordneten Paket einstellen möchte, zuerst existiert (weil sie nicht immer da wäre), wenn ja, setze sie .

Unten finden Sie den Code I mit

kam
 // have to do this FIRST so you can access variable without passing it into the script task from SSIS tool box 
     // Populate collection of variables. 
     //This will include parent package variables. 
     Variables vars = null; 
     Dts.VariableDispenser.GetVariables(ref vars); 
 // checks if this variable exists, and if so then will set it to the value of the child variable 

     if (Dts.VariableDispenser.Contains("ParentVar") == true)    
     { 
      //MessageBox.Show("ParentVariableExists"); 

      // Lock the to and from variables. 
      // parent variable 
      Dts.VariableDispenser.LockForWrite("User::ParentVar"); 
      // child variable 
      Dts.VariableDispenser.LockForRead("User::ChildVar"); 

      // Apparently need to call GetVariables again after locking them. 
      // Not sure why - perhaps to get a clean post-lock set of values. 
      Dts.VariableDispenser.GetVariables(ref vars); 
      // parentvar = childvar 
      vars["User::ParentVar"].Value = vars["User::ChildVar"].Value; 

      vars.Unlock(); 

     } 
1

Sie können die Variable in das übergeordnete Paket einfügen und das untergeordnete Paket ändern lassen.

Ein weiterer sicherer Weg besteht darin, eine Tabelle im untergeordneten Paket zu füllen und die Tabelle im übergeordneten Paket zu lesen.

+1

Ich habe das versucht Verwenden von Paketkonfigurationen auf die gleiche Weise wie beim Festlegen der untergeordneten Variablen von übergeordnetem Element und nicht beim Zurückgeben von untergeordneten Pakets wurde der Wert im übergeordneten Paket nicht aktualisiert. – Brad