Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie ändere ich die Variable in SSIS?

Wie @Yuck und @devarc angemerkt haben, gibt es zwei unterschiedliche und unterschiedliche Werte a Variable hält. Der Entwurfszeitwert ist der Wert, den Sie zuweisen, wenn die Variable zum ersten Mal erstellt wird. In Ihrem Fall enthält die Variable C:\Test.txt als Entwurfszeitwert. Jedes Mal, wenn Sie das Paket öffnen, wird C:\Test.txt angezeigt, bis Sie es in

ändern

Um den Wert einer Variablen zu ändern, während das Paket ausgeführt wird, haben Sie die Möglichkeit, den Wert entweder festzulegen oder zu berechnen. Hier habe ich eine Variable CurrentFile auf Paketebene erstellt mit dem Wert C:\Test.txt

Eine Sache, die Leute oft stolpert, ist, dass sie den Laufzeitwert korrekt geändert haben, aber wenn sie ihn in BIDS ausführen, sehen sie den "alten" Wert. Der im Variablenfenster angezeigte Wert ändert sich während der Paketausführung nicht.

Während der Paketausführung zeigt mein Variablenfenster immer noch den Entwurfszeitwert (C:\Test.txt), aber der wahre Wert wird im Locals-Fenster (C:\Test2.txt) widergespiegelt

Einen Wert festlegen

Der Wert von fast allem in SSIS kann zur Laufzeit durch eine Reihe von ausführlichen Befehlszeilenoptionen oder über die Konfiguration Quellen. Der größte Unterschied besteht meines Erachtens darin, dass dieser Ansatz darin besteht, dass der Wert immer der Wert für die gesamte Lebensdauer der Paketausführung ist. Sequentielle oder parallele Aufrufe eines Pakets können diesen Wert ändern, außer das Ausführung würde der Wert konstant bleiben (außer einer expliziten Änderung des Wertes.

/SET

Befehlszeilenausführung (dtexec.exe), Rechtsklick auf ein Paket und Ausführen aus dem Dateisystem (dtexecUI.exe) oder Erstellen eines SQL Agent-Auftragsschritts von SQL Server Integration Services ermöglichen die Bereitstellung eines Laufzeitwerts über den SET-Befehl . Unter Verwendung der obigen Variablen würde der folgende Befehl den Laufzeitwert auf C:\Test2.txt setzen

dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"

Konfiguration

SSIS bietet eine Option zum Erstellen von Konfigurationsquellen, um Paketen Laufzeitwerte bereitzustellen. Der Artikel, auf den ich oben verlinkt habe, beschreibt die Vor- und Nachteile der Konfigurationsoptionen viel besser als ich es hier tun werde. Ich werde sagen, dass ich normalerweise beide verwende - mein SET-Befehl konfiguriert einen Verbindungsmanager, der dann vom Paket verwendet wird, um den "vollständigen" Satz von Paketkonfigurationen zu finden.

Wert berechnen

Es gibt eine Vielzahl von Aufgaben in SSIS, die den Wert einer Variablen ändern können, sowie die Verwendung von Ausdrücken zum Ändern eines Werts. Ich sehe diese als Dinge, die während des Transports des Pakets mit Wert arbeiten.

Aufgaben

Ein Skript-Task ist einer der am häufigsten verwendeten Mechanismen für Anfänger, aber ich finde andere Tools im SSIS-Toolkit normalerweise besser geeignet, um Variablenwerte zu ändern.

Foreach-Schleifencontainer und SQL-Task ausführen sind zwei der anderen großen Aufgaben, die Sie sich für die Zuweisung eines Variablenwerts ansehen sollten.

Ausdrücke

Ausdrücke sind die glorreichste Süßigkeit in der SSIS-Toolbox. Fast jedes „Ding“ in SSIS macht Eigenschaften für die Konfiguration verfügbar. Das ist hilfreich, aber die Verwendung eines Ausdrucks zum Erstellen dieser Eigenschaften ist hervorragend.

Stellen Sie sich zum Beispiel 3 Variablen RootFolder vor , FileName und ComputedCurrentFile mit den Werten C:\, File2.txt und leerer Zeichenfolge. Im Eigenschaftenfenster für ComputedCurrentFile Wir würden den Wert für EvaluateAsExpression von False in True ändern und dann einen Ausdruck wie @[User::RootFolder]+ "\\" [email protected][User::FileName] Das verkettet einfach den Wert der ersten beiden Variablen miteinander. Dies kann hilfreich sein, wenn der Dateiname für die Verarbeitung Standard war, sich der Quellordner jedoch häufig geändert hat. Oder wenn wir über die Ausgabe sprechen, ist es üblich, Ausdrücke zu verwenden, um einen Ausgabedateinamen zu erstellen, der das Datum und möglicherweise die Uhrzeit der Ausführung des Pakets verwendet.

Schließlich steht einem Mischen und Anpassen dieser Ansätze nichts im Wege. Normalerweise verwende ich eine Konfiguration, um einen Dateienumerator auf den richtigen Startordner zu verweisen und dann berechnete Werte zu verwenden, um die aktuelle Datei für die Verarbeitung zu identifizieren.