Jak poznamenali @Yuck a @devarc, existují dvě různé a odlišné hodnoty a Proměnná drží. Hodnota v době návrhu je hodnota, kterou přiřadíte při prvním vytvoření proměnné. Ve vašem případě proměnná obsahuje C:\Test.txt jako hodnotu v době návrhu. Při každém otevření balíčku se zobrazí C:\Test.txt, dokud jej nezměníte v
Chcete-li, aby se hodnota proměnné změnila, když je balíček spuštěn, můžete hodnotu buď nastavit, nebo ji vypočítat. Zde jsem vytvořil proměnnou na úrovni balíčku CurrentFile
s hodnotou C:\Test.txt
Jedna věc, která lidi často podrazí, je, že správně změnili hodnotu doby běhu, ale když ji spustí v nabídce BIDS, uvidí „starou“ hodnotu. Hodnota zobrazená v okně Proměnné se během provádění balíčku nemění.
Během provádění balíčku moje okno Proměnné stále zobrazuje hodnotu v době návrhu (C:\Test.txt), ale skutečná hodnota se odráží v okně Locals (C:\Test2.txt)
Nastavení hodnoty
Hodnotu většiny čehokoli v SSIS lze stanovit za běhu pomocí sady podrobných možnosti příkazového řádku nebo prostřednictvím konfigurace prameny. Největší rozdíl podle mého názoru spočívá v tom, že tento přístup spočívá v tom, že hodnota bude vždy hodnotou po celou dobu trvání provádění balíčku. Sekvenční nebo paralelní vyvolání balíčku může změnit tuto hodnotu, ale to provedení by hodnota zůstala konstantní (s výjimkou explicitní úpravy hodnoty.
/SET
Spuštění příkazového řádku (dtexec.exe), klepnutí pravým tlačítkem na balíček a spuštění ze systému souborů (dtexecUI.exe) nebo vytvoření kroku úlohy SQL Agent služby SQL Server Integration Services umožňují poskytnout hodnotu za běhu prostřednictvím příkazu SET. . Pomocí výše uvedené proměnné by následující příkaz nastavil hodnotu za běhu na C:\Test2.txt
dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"
Konfigurace
SSIS nabízí možnost vytvořit zdroje konfigurace pro poskytování run-time hodnot pro balíčky. Článek, na který jsem odkazoval výše, popisuje výhody a nevýhody možností konfigurace mnohem lépe než zde. Řeknu, že obvykle používám obojí - můj příkaz SET konfiguruje správce připojení, který pak balíček používá k nalezení "úplné" sady konfigurací balíčku.
Výpočet hodnoty
V SSIS existuje řada úloh, které mohou změnit hodnotu proměnné, stejně jako použití výrazů ke změně hodnoty. Vidím to jako věci, které fungují na hodnotě, když je balíček v letu.
Úkoly
Úloha skriptu je jedním z nejčastěji používaných mechanismů pro ty, kteří začínají, ale shledávám, že jiné nástroje v sadě nástrojů SSIS jsou obvykle vhodnější pro změnu hodnot proměnných.
Foreach Loop Container a Spustit úlohu SQL jsou dva z dalších velkých úkolů, na které byste se měli podívat při přiřazení hodnoty proměnné.
Výrazy
Výrazy jsou nejslavnějším bonbónkem v sadě nástrojů SSIS. Většina „věcí“ v SSIS odhaluje vlastnosti pro konfiguraci. To je užitečné, ale použití přiřazení výrazu k vytvoření těchto vlastností je vynikající.
Představte si například 3 proměnné RootFolder
, FileName
a ComputedCurrentFile
s hodnotami C:\, File2.txt a prázdným řetězcem. V okně Vlastnosti pro ComputedCurrentFile
změnili bychom hodnotu pro EvaluateAsExpression z False na True a pak použili výraz jako @[User::RootFolder]+ "\\" [email protected][User::FileName]
To jednoduše zřetězí hodnotu prvních dvou proměnných dohromady. To může být užitečné, pokud byl název souboru pro zpracování standardní, ale zdrojová složka se často měnila. Nebo pokud mluvíme o výstupu, je běžné používat výrazy k vytvoření názvu výstupního souboru pomocí data a případně času, kdy je balíček spuštěn.
Konečně nic nebrání míchání a sladění těchto přístupů. Obvykle používám konfiguraci k nasměrování enumerátoru souborů na správnou počáteční složku a poté pomocí vypočítaných hodnot identifikuji aktuální soubor ke zpracování.