Gewusst wie: schreiben einer Variable in Skript-Komponente
Ich schreiben möchte den Wert einer Variablen im Paket mit Skript-Komponente mit C#.
derzeit bin ich mit diesen code:
public class ScriptMain : UserComponent
{
string s, r, m;
public override void PreExecute()
{
base.PreExecute();
}
public override void PostExecute()
{
base.PostExecute();
Variables.SNumber = s;
Variables.RNumber = r;
Variables.MNumber = m;
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (Row.Col1.Equals("MyName"))
{
s = Row.Column4.Substring(122, 5).Trim();
r = Row.Column8.Substring(5, 14).Trim();
m = Row.Column8.Substring(66, 4).Trim() + "." + Row.Column8.Substring(70,
2).Trim();
}
}
}
SNumber,Mnumber und RNumber sind meine globalen Variablen in den Paketen.Nach der Skript-Komponente iam mit abgeleiteten Spalte zuweisen der Werte.
Aber die Variablen keinen Wert hat.Plz help me.
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, dies ist ein Skript compoent in einem data flow task. Sie können Variablen verwenden, in diesem Sinn, leider. Sie müssen entweder die Spalten erstellen, die halten diese Werte für eine Zeile-für-Zeile-basis oder Sie werden kreativ.
Einen Weg, hier ist eine pipe Ihre Daten fließen zu einem recordset Ziel, erstellen Sie eine variable vom Objekttyp und Variablen zu halten, jede Spalte, die Sie brauchen, in diese Daten fließen. Sie können dann mit einer Foreach-Schleife über das Recordset Ziel, dass ist nun gespeichert in der Objekt-variable. Wenn Sie etwas haben muss, um Dinge zu tun, die auf einer Zeile-für-Zeile-basis, der nicht in einer Daten-flow pro se, Sie können dies erreichen, jetzt, da die Daten-Fluss-Vorgang aufgerufen wird für jede Zeile einmal. (Dies ist mühsam, und besser geeignet für andere Bedürfnisse als bei Euch)
Sollten Sie in der Lage sein zu erreichen, was Sie wollen, zu tun, oben in einer Abgeleiteten Spalte.
Verweis auf Skriptkomponente in Datenfluss : http://msdn.microsoft.com/en-us/library/aa337079.aspx
Den Prozess, den Sie versuchen zu erreichen, in der Frage getan werden kann, mit Hilfe der
Output Columns
imScript Component Transformation
Aufgabe, anstelle der Verwendung der Variablen. Das folgende Beispiel erläutert, wie dies erreicht werden kann, und es wird auch veranschaulicht, wie Variablen verwendet werden können innerhalb des Skript-Komponente. Aber die gleiche Funktionalität erreicht werden kann, mitDerived Column Transformation
Aufgabe als gut.Diesem Beispiel wird eine CSV-Datei liest und auf der Grundlage der ersten Spalte Wert, es zu extrahieren Wert aus der zweiten Spalte ab, ein give-position und-Länge. Alle diese Werte werden in einer Variablen gespeichert werden.
Schritt-für-Schritt-Prozess:
Erstellen Sie eine CSV-Datei wie in Abbildung #1. Wenn die erste Spalte hat den Wert
Customer
, extrahieren wir 6 Zeichen von 9. Zeichen in der zweiten Spalte Wert. Wenn die erste Spalte hat den WertVendor
, extrahieren wir 7 Zeichen von 21st Zeichen in der zweiten Spalte Wert. Für jeden anderen Wert, wird das Paket annehmen null-Wert für die zweite Spalte Wert.Erstellen Sie eine Tabelle mit dem Namen
dbo.Destination
mit dem Skript unter SQL-Skripts Abschnitt. Das Paket einfügen der CSV-Daten in diese Tabelle.Auf das SSIS-Paket erstellen 6 Variablen, wie man in Abbildung #2. Konfigurieren einer
OLE DB connection
Verbindung mit der SQL Server-Instanz. Konfigurieren Sie eineFlat File connection
zum Lesen der CSV-Datei wie unten in den screenshots #3 - #6. Legen Sie außerdem einData Flow Task
auf dieControl Flow
Registerkarte des Pakets.Konfigurieren Sie die Registerkarte Datenfluss mit einem
Flat File Source
,Script Component Transformation Task
(Siehe screenshot #7) und eineOLE DB Destination
.Konfigurieren Sie die
Flat File Source
Aufgabe, wie gezeigt in den screenshots #8 und #9.Konfigurieren Sie die
Script Component
transformation Aufgabe wie gezeigt in den screenshots #10 und #11. Eine neueOutput Column
namens SNumber der Datentypfour-byte signed integer [DT_I4]
erstellt, die zum speichern der extrahierten Wert. Ersetzen Sie dieScript Component
- code mit code, der angezeigt wird, unterScript Component Code
Abschnitt.PreExecute
Methode liest die Paket-Variablen' Werte, und die MethodeInput0_ProcessInputRow
Prozesse, die der Logik zum füllen der Spalte AusgabeSNumber
.Konfigurieren Sie die
OLE DB Destination
Aufgabe, wie gezeigt in den screenshots #12 und #13.Screenshot #14 zeigt sample-Paket Ausführung.
Screenshot #15 zeigt die Daten in der Tabelle
dbo.Destination
nach Ausführung des Pakets.Hoffe, das hilft.
SQL-Skripts:
.
Skript-Komponente Code:
C# code, der verwendet werden kann, nur in
SSIS 2008 and above
..
Screenshot #1:
Screenshot #2:
Screenshot #3:
Screenshot #4:
Screenshot #5:
Screenshot #6:
Screenshot #7:
Screenshot #8:
Screenshot #9:
Screenshot #10:
Screenshot #11:
Screenshot #12:
Screenshot #13:
Screenshot #14:
Screenshot #15:
Aussieht, als könnte man vermeiden, eine Skript-Komponente vollständig hier und verwenden nur eine Abgeleitete Spalte-Aufgabe erstellen 3 neue Spalten für SNumber, RNumber und MNumber, mit einem Ausdruck wie
und so weiter.
Wählen Sie Ihre Variablen als
ReadWriteVariable
auf der Transform-Editor, dann verwenden Sie den folgenden code: