Bij mijn huidige opdrachtgever zijn veel relatief kleine applicaties gemaakt met Visual Basic 6. Het beleid is erop gericht dit terug te brengen tot een aantal grote applicaties. Toch komt het nog wel eens voor dat de mensen op de werkvloer een oude applicatie missen en bepaalde gegevens willen raadplegen. Vorige week kreeg ik de opdracht om in korte tijd de applicatie DEKKINGSBOEKEN weer terug te zetten. In het verleden maakte deze applicatie gebruik van een Oracle database. De server waar dit op draaide is inmiddels historie. Van de data had men nog wel een back-up naar SQL Server gemaakt. Kwestie van connectiestring aanpassen dachten we in eerste instantie. De klus bleek toch iets omvangrijker dan dat: de VB code bevatte een groot aantal SQL statements met een specifiek Oracle dialect. Dit laten staan was geen optie: daar zou het programma op stuk lopen.
Er waren heel erg veel aanpassingen maar de meesten waren niet al te ingewikkeld. Oracle kent bijvoorbeeld een DECODE commando. Dit komt overeen met een CASE statement in SQL Server. Een andere eenvoudige aanpassing was de conversie van datumwaarden naar String. Oracle gebruikt hiervoor To_Char. In SQL server gebruik je een CONVERT functie. Verder gebruikt SQL server een + ipv. een || om strings aan elkaar te plakken.
Wat ik niet direct kon plaatsen was een (+) constructie bij joins. Na wat zoeken met Google blijkt dit een notatie voor een LEFT JOIN te zijn. Aangezien we weinig tijd hadden om tientallen SQL statements, met elk meerdere keren een (+) in de code, netjes te herschrijven naar een LEFT OUTER JOIN, heb ik gekozen voor een snelle oplossing door voor SQL Server *= of =* te gebruiken ipv. (+) om een LEFT OUTER JOIN mee aan te geven. De * staat daarbij aan de kant van de tabel waarvan je alle records wilt tonen. De constructie met *= of =* is niet volgens ANSI standaard. De DB accepteert deze code dan ook niet zonder meer. Voer de volgende SP uit om de DB weer compatibel te maken met de oude notatie.
exec sp_dbcmptlevel ‘DEKKINGSBOEKEN’, 80
Voorlopig zijn we gered met deze oplossing. Wanneer er in de toekomst een versie van SQL Server komt die deze backwards compatibility niet meer ondersteunt, dan zal de VB code zo herschreven moeten worden dat er normale LEFT OUTER JOINS worden gebruikt.

