Problem
SQL Server Integration Services lassen sich für ETL-Workflows nutzen. Über eine grafische Oberfläche können diese realisiert werden. SQL Server stellt auch die Infrastruktur bereit, damit diese auf Basis von Metaprogrammierung generiert werden können. Bei Themen wie das Agile Data Warehouse und Data Vault ist der Automatisierungsgedanke weit verbreitet. Neben der Business Intelligence Markup Language (BIML) sind solche Automationen auch mit C# realisierbar. Entscheidend dabei ist die Abstimmung der Referenzen auf die jeweilige SQL Server Version.
Beim Einrichten auf einen neuen Rechner führte Visual Studio ein Update der Referenzen von SQL Server 2014 auf Version SQL Server 2017 durch. Dies führte zu Fehler wie:
Assembly 'Microsoft.SqlServer.TxScript' with identity 'Microsoft.SqlServer.TxScript, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' uses 'Microsoft.SqlServer.VSTAScriptingLib, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' which has a higher version than referenced assembly 'Microsoft.SqlServer.VSTAScriptingLib' with identity 'Microsoft.SqlServer.VSTAScriptingLib, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'
Aktion
In der .csproj – Datei existiert zu den Referenzen der HINT-Pfad. Bei der Version zum Eintrag stand 14.0.0. Diese passten wir auf 12.0.0 an. Bei einer Referenzierung auf dem Assembly Cache ist zudem die Anpassung des HintPath auf den absoluten Pfad empfehlenswert.
<Reference Include="Microsoft.SqlServer.TxScript, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> <HintPath>..\..\..\..\..\..\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SqlServer.TxScript\v4.0_12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.TxScript.dll</HintPath> </Reference>
Bei zwei Rechnern liefen zudem noch die SQL Server Data Tools 2015. Nach Deinstallation dieser Komponente hatte der Spuk mit der selbständigen Aktualisierung der Referenzen auf eine höhere Version ein Ende.
Resultat
Die Solution lässt sich auf einen neuen Entwicklungsrechner fehlerfrei auschecken und erstellen. So können neben dem automatisierten Deployment auch die ETL-Ladestrecken automatisiert auf Basis der Metadaten generiert, getestet und vom Team angepasst werden.