Zoals @Yuck en @devarc hebben opgemerkt, zijn er twee verschillende en verschillende waarden a Variabele houdt. De Design-time-waarde is de waarde die u toewijst wanneer de variabele voor het eerst wordt gemaakt. In jouw geval bevat de variabele C:\Test.txt als de ontwerptijdwaarde. Telkens wanneer u het pakket opent, wordt C:\Test.txt weergegeven totdat u het wijzigt in de
Om de waarde van een variabele te wijzigen terwijl het pakket wordt uitgevoerd, zijn uw opties om de waarde in te stellen of te berekenen. Hier heb ik een variabele op pakketniveau gemaakt CurrentFile
met de waarde van C:\Test.txt
Een ding dat mensen vaak overstuur maakt, is dat ze de runtime-waarde correct hebben gewijzigd, maar wanneer ze deze in BIDS uitvoeren, zien ze de "oude" waarde. De waarde die wordt weergegeven in het venster Variabelen verandert niet tijdens de uitvoering van het pakket.
Tijdens de uitvoering van het pakket toont mijn variabelenvenster nog steeds de ontwerptijdwaarde (C:\Test.txt), maar de werkelijke waarde wordt weergegeven in het venster Locals (C:\Test2.txt)
Een waarde instellen
De waarde van bijna alles in SSIS kan tijdens runtime worden vastgesteld via een reeks uitgebreide opdrachtregelopties of via configuratie bronnen. Het grootste verschil in mijn gedachten is dat deze benadering is dat de waarde altijd de waarde zal zijn voor de gehele levensduur van pakketuitvoering. Opeenvolgende of parallelle aanroepen van een pakket kunnen die waarde veranderen, maar voor dat uitvoering zou de waarde constant blijven (behoudens een expliciete wijziging van de waarde.
/SET
Opdrachtregeluitvoering (dtexec.exe), rechtsklikken op een pakket en uitvoeren vanuit het bestandssysteem (dtexecUI.exe) of het maken van een SQL Agent-taakstap van SQL Server Integration Services maken het mogelijk om een runtime-waarde te verstrekken via de opdracht SET . Met behulp van de bovenstaande variabele zou de volgende opdracht de runtime-waarde instellen op C:\Test2.txt
dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"
Configuratie
SSIS biedt een optie om configuratiebronnen te maken om runtime-waarden aan pakketten te leveren. Het artikel waarnaar ik hierboven heb gelinkt, beschrijft de voor- en nadelen van de configuratie-opties veel beter dan ik hier zal doen. Ik zal zeggen dat ik meestal beide gebruik - mijn SET-opdracht configureert een verbindingsbeheerder die vervolgens door het pakket wordt gebruikt om de "volledige" set pakketconfiguraties te vinden.
Een waarde berekenen
Er zijn verschillende taken in SSIS die de waarde van een variabele kunnen wijzigen, evenals het gebruik van expressies om een waarde te wijzigen. Ik zie dit als dingen die op waarde werken terwijl het pakket in de lucht is.
Taken
Een scripttaak is een van de meest gebruikte mechanismen voor beginners, maar ik vind andere tools in de SSIS-toolkit meestal beter geschikt voor het wijzigen van variabele waarden.
Foreach Loop-container en SQL-taak uitvoeren zijn twee van de andere grote taken waar je naar moet kijken voor het toekennen van een variabele waarde.
Uitdrukkingen
Expressies zijn het meest glorieuze snoepje in de SSIS-toolbox. Bijna elk "ding" in SSIS stelt eigenschappen voor configuratie bloot. Dat is handig, maar het toewijzen van een expressie om die eigenschappen te bouwen is uitstekend.
Stel je bijvoorbeeld 3 variabelen voor RootFolder
, FileName
en ComputedCurrentFile
met waarden van C:\, File2.txt en lege string. In het venster Eigenschappen voor ComputedCurrentFile
we zouden de waarde voor EvaluateAsExpression wijzigen van False in True en dan een expressie gebruiken zoals @[User::RootFolder]+ "\\" [email protected][User::FileName]
Dat voegt eenvoudig de waarde van de eerste twee variabelen samen. Dit kan handig zijn als de bestandsnaam voor verwerking standaard was, maar de bronmap vaak is gewijzigd. Of als we het over uitvoer hebben, is het gebruikelijk om expressies te gebruiken om een uitvoerbestandsnaam op te bouwen met de datum en mogelijk het tijdstip waarop het pakket wordt uitgevoerd.
Ten slotte staat niets een vermenging en afstemming van deze benaderingen in de weg. Ik gebruik meestal een configuratie om een bestandsenumerator naar de juiste startmap te verwijzen en gebruik vervolgens berekende waarden om het huidige bestand voor verwerking te identificeren.