sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan ændres variablen i SSIS?

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.



  1. Implementering af MySQL, MariaDB, Percona Server, MongoDB eller PostgreSQL - gjort nemt med ClusterControl

  2. Forespørgsel efter PHP/MySql OG/ELLER for en avanceret søgning

  3. Kunne ikke indlæse fil eller assembly Microsoft.ReportViewer.WebForms.XmlSerializers

  4. Hvordan importerer jeg en sql-datafil til SQL Server?