Som @Yuck og @devarc har bemærket, er der to forskellige og distinkte værdier en Variabel holder. Design-tidsværdien er den værdi, du tildeler, når variablen oprettes første gang. I dit tilfælde holder variablen C:\Test.txt som designtidsværdien. Hver gang du åbner pakken, vil den vise C:\Test.txt, indtil du ændrer den i
For at ændre værdien af en variabel, mens pakken kører, er dine muligheder enten at indstille værdien eller beregne den. Her har jeg oprettet en variabel på pakkeniveau CurrentFile
med værdien C:\Test.txt
En ting, der ofte falder folk i fare, er, at de har ændret køretidsværdien korrekt, men når de kører den i BIDS, ser de den "gamle" værdi. Værdien, der vises i vinduet Variabler, ændres ikke under pakkekørsel.
Under pakkekørsel viser mit Variables-vindue stadig designtidsværdien (C:\Test.txt), men den sande værdi afspejles i Locals-vinduet (C:\Test2.txt)
Indstilling af en værdi
Værdien af det meste i SSIS kan fastslås under kørslen gennem et sæt verbose kommandolinjeindstillinger eller gennem konfiguration kilder. Den største forskel i mit sind er, at denne tilgang er, at værdien altid vil være værdien for hele levetiden for pakkeudførelse. Sekventielle eller parallelle påkald af en pakke kan ændre denne værdi, bortset fra det udførelse vil værdien forblive konstant (bortset fra en eksplicit ændring af værdien.
/SET
Kommandolinjeudførelse (dtexec.exe), højreklik på en pakke og kørsel fra filsystemet (dtexecUI.exe) eller oprettelse af et SQL Agent-jobtrin i SQL Server Integration Services giver alle mulighed for at give en runtime-værdi gennem SET-kommandoen . Ved at bruge ovenstående variabel vil følgende kommando indstille kørselstidsværdien til C:\Test2.txt
dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"
Konfiguration
SSIS tilbyder en mulighed for at oprette konfigurationskilder for at levere runtime-værdier til pakker. Artiklen, jeg linkede til ovenfor, gør et meget bedre stykke arbejde med at beskrive fordele og ulemper ved konfigurationsmulighederne, end jeg vil gøre her. Jeg vil sige, at jeg typisk bruger begge - min SET-kommando konfigurerer en forbindelsesadministrator, som derefter bruges af pakken til at finde det "fulde" sæt af pakkekonfigurationer.
Beregning af en værdi
Der er en række forskellige opgaver i SSIS, der kan ændre værdien af en variabel samt brugen af udtryk til at ændre en værdi. Jeg ser disse som ting, der fungerer på værdi, mens pakken er under flyvning.
Opgaver
En scriptopgave er en af de mest almindeligt anvendte mekanismer for dem, der starter, men jeg finder, at andre værktøjer i SSIS-værktøjssættet normalt er bedre egnet til at ændre variabelværdier.
Foreach Loop Container og Udfør SQL-opgave er to af de andre store opgaver, du bør se på for tildeling af en variabelværdi.
Udtryk
Udtryk er det mest herlige slik i SSIS-værktøjskassen. Næsten alle "ting" i SSIS afslører egenskaber til konfiguration. Det er nyttigt, men at bruge tildeling af et udtryk til at bygge disse egenskaber er enestående.
Forestil dig for eksempel 3 variabler RootFolder
, FileName
og ComputedCurrentFile
med værdierne C:\, File2.txt og tom streng. I vinduet Egenskaber for ComputedCurrentFile
vi ville ændre værdien for EvaluateAsExpression fra False til True og derefter bruge et udtryk som @[User::RootFolder]+ "\\" [email protected][User::FileName]
Det sammenkæder simpelthen værdien af de to første variable sammen. Dette kan være nyttigt, hvis filnavnet til behandling var standard, men kildemappen ændrede sig ofte. Eller hvis vi taler om output, er det almindeligt at bruge udtryk til at bygge et outputfilnavn ved at bruge datoen og muligvis klokkeslættet for, hvornår pakken kører.
Endelig er der intet, der forhindrer en blanding og matchning af disse tilgange. Jeg bruger typisk en konfiguration til at pege en filtæller på den korrekte startmappe og derefter bruge beregnede værdier til at identificere den aktuelle fil til behandling.