Het komt regelmatig voor dat je een bestand wilt inladen in een database. Heb je de beschikking over SQL Server 2005 of hoger, dan ligt het voor de hand om dit proces te automatiseren met behulp van SSIS. De eerste stap die je dan moet zetten is: laat Integration Services kijken of het bestand op de afgesproken plaats staat. Is dat het geval, dan ga je verder met de afhandeling van het proces, is dat niet het geval dan schrijf je een paar gegevens weg naar een log-bestand. Dit laatste doe je vooral om in geval van een meningsverschil aan te kunnen geven dat SSIS zijn werk gedaan heeft.
In principe is het niet erg ingewikkeld om een taakje te maken waarmee je controleert op de aanwezigheid van een bestand. Je begint met het aanmaken van twee variabelen. De ene is een boolean die gaat aangeven of het bestand bestaat, ja of nee. Deze variabele krijgt de standaardwaarde ‘False’ mee. De andere variabele is een string en daarin wordt de volledige bestandsnaam, dus inclusief pad, opgeslagen. De scope van deze variabelen is het hele package. In dit voorbeeld is de naam van het package Test.dtsx.
De instelling van de variabelen zie je hier:
Vervolgens plaats je een Script task op de control flow en die bewerk je als volgt:
Rechtsklik op de taak en selecteer ‘Edit’. Je komt in de editor terecht en hier kun je kiezen voor VB of C# als script taal. Ik kies voor C# omdat ik daarmee de meeste ervaring heb. Bij ReadOnlyVariables vul je in User::strBestand en bij ReadWriteVariables kies je voor User::blAanwezig. Vervolgens druk je op de button ‘Edit Script’. Je krijgt dan een scripting omgeving voor je neus waarin je nog maar erg weinig zelf hoeft in te vullen. Bij de using directives voeg je toe: ‘using System.IO’. Dit doe je omdat je zo meteen de Exists method van het File object wilt aanspreken en daarvoor heb je deze namespace nodig.
Als je naar beneden scrollt, dan kom je de Main method tegen en je moet er voor zorgen dat die er aldus uitziet:
Daarmee is de script taak ingesteld. Als het bestand op de aangegeven locatie bestaat, dan wordt de boolean op True gezet, en anders op False. De volgende stap is het uitsplitsen van taken voor beide gevallen. Voor deze test voeg ik alleen even twee Data flow tasks toe, die ik later ga invullen. Dat ziet er zo uit:
Het gaat hier vooral nog om de twee groene pijlen, die de zogenaamde precedence constraints voorstellen. Ze wijzen naar de twee data flow tasks: Data moeten worden weggeschreven in het geval het bestand op de afgesproken lokatie bestaat, de afwezigheid moet worden gelogd voor het geval dat dat niet zo is.
Als je op een groene pijl dubbelklikt dan kom je in de Precedence Constraint Editor uit en die moet je nog instellen voor het wegschrijven van de data:
Wil je de afwezigheid loggen, dan is het enige verschil dat je bij de expression invult: @blAanwezig == False.
Een volgende keer zal ik laten zien hoe je een gevonden bestand inleest en dat wegschrijft naar een database.



