Als je gaat beginnen met Linq to SQL binneneen drie lagen architectuur wil je Linq beperken tot de data access laag zoals voorgeschreven in een 3-Tier applicatie. Ik heb daarom in de DL Layer een DA class gemaakt waarin ik static functies plaats met daarin de linq queries en insert, update en delete logica.
Lees verder…
Voor een uitbreiding van een website bij mijn opdrachtgever kreeg ik laatst het verzoek om een stored procedure te maken waarmee je documenten uit een database kunt vinden. Als zoekcriterium kun je hiervoor oa. een aantal woorden invullen dat binnen de tekst moet voorkomen. Voor deze stored procedure heb ik dynamisch SQL gebruikt. Dynamisch heeft hier de betekenis dat je de query runtime opbouwt en dan pas uitvoert. Deze techniek zul je niet vaak gebruiken, omdat juist de kracht van stored procedures is dat deze vooraf gecompileerd zijn en daardoor snel het gewenste resultaat opleveren. Ook zul je hierbij bewust moeten zijn van het gevaar van SQL injection. Bij deze opdracht heb ik toch voor dynamische SQL gekozen, omdat het aantal zoekwoorden kan variëren van 0 tot meer dan 10.
De totale stored procedure (SP) is te lang om hier in z’n geheel weer te geven. Dit verhaal zou dan ook voor sommigen saai en langdradig worden en dat is nu net wat je niet verwacht bij een artikel met ‘Dynamisch’ in de titel. Om de vaart erin te houden, wil ik in dit blog daarom de belangrijkste onderdelen even kort benoemen. Wie weet helpt het iemand op weg die ook met dynamisch SQL wil werken. Ik ben overigens best benieuwd naar andere voorbeelden van geschikte toepassingen van deze techniek.
Dit geeft dan:
Boer, R. de
Vaart, R. van der
Bergkamp, D.
Schip, J. van ‘t
Op zich een goede manier om namen weer te geven, maar soms wil je liever de namen op een normale manier tonen.
R. de Boer
R. van der Vaart
D. Bergkamp
J. van ‘t Schip
Met onderstaande selectie kun je de naam van een persoon op een normale manier weergeven, zonder overbodige spaties.
SELECT voetballer = LTRIM(RTRIM(ISNULL(voorletters, '') + ' ' + ISNULL(tussenvoegsels, '')) + ' ' + ISNULL(naam,'') ) FROM tblspeler
Een update statement in SQL Server. Ik kom ze bijna dagelijks tegen. Meestal is de syntax erg eenvoudig. Soms is de where clause wat uitgebreider, wanneer de update afhankelijk is van de inhoud van een andere tabel. Hieronder een voorbeeld van een update query zoals ik ze tot nu toe meestal maakte.
UPDATE MetaLoginMenu
SET Positie = 20
WHERE MetaMenuID =
(
SELECT MetaMenuID
FROM MetaMenu
WHERE MenuNaam = ‘mnuAbout’
)
AND MetaLoginID = 3
In dit voorbeeld gaat het nog om slechts twee tabellen. In de praktijk kunnen dit er al snel meer zijn, waardoor de where clause wat onoverzichtelijk wordt. Een constructie met een inner join kan dan uitkomst bieden.
UPDATE L
SET Positie = 20
FROM MetaLoginMenu L INNER JOIN
Metamenu M ON L.MetaMenuID = M.MetaMenuID
AND MenuNaam = ‘mnuAbout’
AND MetaLoginID = 3
De onderste variant lijkt op het eerste gezicht wat vreemd: er staat geen where in de query! Toch is het resultaat van beide queries identiek. Qua performance is er amper verschil merkbaar. Bij een meer uitgebreide update kies ik de laatste tijd steeds vaker voor de onderste variant.