SQL Server Data Tools
387

Dit blogbericht schrijf ik naar aanleiding van een minder elegante praktijksituatie die ik bij een bedrijf gezien heb. Daar was het de gewoonte om een BAK bestand van een SQL-database te genereren en samen met eventuele wijzigingen via handmatig gegenereerde SQL scripts in SVN te op te slaan. Later, na invoering van TFS, bleef men op dezelfde manier deze files in TFS opslaan. Ik vond dat ik hier iets aan moest doen, door uit te zoeken hoe een database op een goede manier in TFS opgeslagen kon worden.

Bij een database project worden alle objecten van een database in tekstbestanden omgezet. De database is daardoor geschikt om in een source control opgeslagen te worden. Daarnaast geven de SQL-tools ondersteuning bij het werken met de database, en de diverse bestanden. Als je SSDT goed gebruikt, wordt de SQL Management Studio bijna overbodig en is het niet nodig om regelmatig tussen Visual Studio en SQL Management Studio te switchen.

Er zijn veel features die de SSDT te bieden heeft. Er kan van het volgende gebruik gemaakt worden:

  • De table designer of de Transact-SQL-editor
  • Een schema-compare tool voor het vergelijken van schema’s om het project te syncen met bijvoorbeeld de productiedatabase
  • Er kan op elk moment een snapshot gemaakt worden van een database
  • Na de ontwikkeling van de database kun je het project overdragen aan een medewerker met de juiste bevoegdheid die de database kan publiceren naar de productie omgeving

Zie de Microsoft documentatie voor installatie instructies, een overzicht van de features en het gebruik ervan. Ik wil alleen aangeven hoe eenvoudig het is om enkele SSDT functies te gebruiken.

Mijn ervaringen met SSDT
De database van het hierboven aangegeven project, heb ik uiteindelijk in TFS opgeslagen met behulp van een database project, dat onderdeel was van de solution. Omdat de database er al was, kon ik vanuit VS SQL Server Object Explorer eenvoudig rechtsklikken op de database en kiezen voor “Create New Project”. Na het geven van een naam en de default instellingen te laten voor wat het was, kon ik verder gaan. Daarna werd er een offline copy gemaakt van de database en werd het als project aan de solution toegevoegd. Na het uitvoeren van deze functie runt de lokale kopie van de database in de localdb die met behulp van de SQL Server Object Explorer te zien is, vanuit Visual Studio.

Als het project gegenereerd is, is het eenvoudig om bijvoorbeeld een tabel te wijzigen. Open daarvoor het SQL-bestand van de betreffende tabel via de Solution Explorer. De table designer, die eruitziet zoals in SQL Management Studio, wordt geopend om wijzigen aan te brengen. Daarna kun je het bestand opslaan en worden de wijzigen uiteraard in de lokale kopie opgeslagen.

Na het genereren van de database als lokale kopie en na het aanbrengen van wijzigen kun je, eventueel, regelmatig een state van de database opslaan, in de vorm van een snapshot. Voer daarvoor eerst een build uit. Rechtsklik het project en kies voor Snapshot project. Daarmee wordt er een dacpac bestand aangemaakt. Je zou zo’n bestand ook in SQL Management Studio kunnen gebruiken. Een dacpac kan ook gebruikt worden bij schema vergelijking met behulp van SSDT.
Als je een dag gewerkt hebt, en je weet niet meer wat de wijzigen zijn die je gemaakt hebt aan een database, kun je een schema vergelijken. Rechtsklik op het project en kies Schema Compare… . Volg de stappen van het dialog om de huidige lokale database versie met de opgegeven database te vergelijken. Vanuit de compare view is het mogelijk om wijzigen direct naar, bijvoorbeeld, een test database op een test server te sturen via de Updateknop. De aanpassingen of toevoegingen worden dan op de target database gemaakt.

Als alles werkt en als alles getest is, zou de database gepubliceerd kunnen worden. Ik maakte bij het bedrijf waar ik voor werkte gebruik van een SQL Server 2012 database. SSDT voorziet in een mogelijkheid om de database naar een andere versie van SQL-server te publishen. Rechtsklik het project en kies binnen de properties voor het juiste Target platform, in mijn geval was dat SQL Server 2012, maar je zou ook voor de optie kunnen kiezen om naar een Windows Azure SQL Database te publishen. Voer na wijziging van deze property opnieuw een build uit. Er zijn overigens nog veel meer properties, voor versiebeheer, bestand locaties van de build en code analyses om rules aan te geven of een build succesvol uitgevoerd mag worden, of niet.
Na het opnieuw uitvoeren van een build en code analyse, kies je, na een rechtsklik op het project, voor de Publish…. Volg daarna de dialog voor het instellen van de verbinding naar een target locatie.

Naast schema vergelijking is er ook datavergelijking. Rechtsklik daarvoor een tabel uit de SQL Server Object Explorer en kies Data Comparison om data uit twee tabellen van twee verschillende sources te vergelijken. Vervolgens kun je hiermee ook de data van de target tabel updaten.

Een ander handig hulpmiddel is de Refactor optie. Als je bijvoorbeeld een tabel wil hernoemen, open je het SQL-bestand, selecteer en rechtsklik je op de tabelnaam en kies je vervolgens voor Refactor. Na het opgeven van een nieuwe naam, krijg je een overzicht van alle wijzigen die je kan doorvoeren.

Hoewel de SSDT een designer bevat, vind ik de SQL Management designer iets prettiger. Bij het toevoegen van bijvoorbeeld constraints biedt het meer hulp. Daarentegen is de storedprocedure ondersteuning in VS beter, met IntelliSence en het uitvoeren daarvan. Je kunt overigens ook gebruik maken van F12, om bijvoorbeeld het table create statement vanuit een storedprocedure te openen.

Voor de database van het project waar ik aan werkte moesten er ook een aantal lookup tabellen standaard voorzien worden van data. Dat heb ik gedaan met behulp van een Post Deployment file. Voor het gebruik van Pre- en Post deployment files verwijs ik je door naar het internet.

Tot slot
Ik heb geprobeerd duidelijk te maken dat SSDT voldoende functionaliteit bevat om een SQL-database geschikt te maken voor source control. Met behulp van de tools kunnen objecten en de data ook beheert worden. SSDT is dus echt de moeite waard om te gebruiken.

Auteur: Marc van Dorenmalen