Bij DTS zullen de meeste lezers aan het volgende bedrijf denken: DTS Meppel. Dat is natuurlijk prima, niets mis mee. Ik vermoed echter dat er ook lezers zijn die de afkorting DTS kennen vanuit SQL Server. DTS staat dan voor Data Transformation Services. Over die DTS gaat het hier. In de Enterprice Manager van SQL Server 2000 heb je de mogelijkheid om een DTS package te maken. Vanaf SQL Server 2005 is DTS in mijn ogen volwassener geworden. De DTS functionaliteit zit echter wel een beetje verstopt en is verweven met Visual Studio. Deze integratie kom je ook tegen in de naamgeving SSIS (SQL Server Integration Service). Onder deze afkorting kun je op Internet meer voorbeelden vinden.
Een probleem waar jullie natuurlijk zelf nooit tegenaan lopen maar andere ontwikkelaars wel, is dat het soms lastig is om een oude applicatie die je ooit hebt geschreven na een paar maanden / jaren nog te begrijpen. Om nog maar te zwijgen over de ellende die je tegenkomt wanneer je hele lappen code van een collega moet bestuderen. Met DTS heb je de mogelijkheid om op een gestructureerde manier een proces samen te stellen. In plaats van een hele brij code is het meer een kwestie van componenten bij elkaar slepen en hierbij de juiste properties in te stellen.
Ok, tijd voor een voorbeeld:
Open vanuit Visual Studio bij Buisiness Intelligence Projects een Integration Services Project. In dit voorbeeld heet het project DBBackup. Hierbij wordt van een bestaande SQL DB een kopie gemaakt in Access formaat.
Bij een SSIS project zul je altijd één of meerdere connecties gebruiken. In dit voorbeeld hebben we er drie: een connectie met de bron DB, een connectie naar de Access DB en een connectie naar een bepaalde map.

Ik maak verder gebruik van een aantal variabelen. De scope DBBackup geeft aan dat de variabelen als globale variabelen gebruikt worden: alle variabelen zijn vanuit alle processen te benaderen.

Het eigenlijke proces, de Control Flow, is net als in Visio samengesteld uit componenten en onderlinge relaties. Voor de componenten heb je de beschikking over een bak met Control Flow Items. De icoontjes laten zien om wat voor soort stap het gaat: een VB script, een File Operation of een SQL taak bijvoorbeeld. Een groene pijl geeft aan dat een deelproces goed is verlopen, een rode lijn geeft de flow na een fout. Ook zijn er blauwe pijlen: deze gebruik je als je de volgende stap altijd wilt uitvoeren, ongeacht het resultaat van de voorgaande stap. In dit voorbeeld kan het zo zijn dat er geen Access DB bestaat. De backup zal dan mislukken en in dat geval hoeven we de oude DB ook niet eerst veilig te stellen.

In mijn proces begin ik met een script. Ik heb wel eens een DTS package gezien waarbij alle stappen uit scripts bestonden. Dit werkt wel maar hiermee krijg je weer één grote codebrij: en daar wilden we nu juist vanaf. Ik gebruik een Script component om de variabelen mee te bewerken. Op deze manier kan ik bijvoorbeeld mijn Access DB een datum en tijd in de naam meegeven.
Public Sub Main() Dim svarBronMap As String Dim svarBronFile As String Dim sVarDoelMap As String Dim sVarDoelFile As String Dim sVarBasisMap As String Dim svarBasisFile As String With Dts svarBronMap = CorrigeerMapNaam(.Connections("BronMap").ConnectionString) svarBronFile = svarBronMap & "\DB.mdb" sVarBasisMap = svarBronMap & "\basis" svarBasisFile = sVarBasisMap & "\DB.mdb" sVarDoelMap = svarBronMap & "\oud" sVarDoelFile = sVarDoelMap & "\DB_" & Format(Now, "yyyyMMdd_HHmmss") & ".mdb" 'gewijzigde variabelen opslaan .Variables("BronFile").Value = svarBronFile .Variables("DoelFile").Value = sVarDoelFile .Variables("BasisFile").Value = sVarBasisFile TaskResult = .Results.Success End With End Sub
Je ziet in dit code voorbeeld dat er ook bij Visual Studio 2005 nog steeds sprake is van Dts! Wanneer je de package opslaat, krijgt het de extentie dtsx: en hier hebben we dan de X waar de titel op doelt…
Tot slot: het is mogelijk om deze DTSX package in SQL server te importeren en daar vanuit een job uit te voeren. Dit kan dan met een schedule bijvoorbeeld iedere week gedaan worden. Hiermee is het wat mij betreft een goede manier om terugkerende processen op een overzichtelijke manier uit te voeren.

