Ik ben bezig met een webservice in .Net 2.0 te ontwikkelen. Daarin heb ik een dataset gemaakt met 2 tabellen. De eerste tabel is gevuld met autouitvoeringen en de tweede met opties die voor de betreffende autouitvoeringen beschikbaar zijn. De gebruiker zal aan de hand van een merk en een type een lijst met uitvoeringen en voor iedere uitvoering een lijst met beschikbare opties terugkrijgen.
Edit: Vergeten te vermelden
: de onderliggende DB is SQL Server 2000.
Uit oogpunt van efficientie, wil ik slechts 2 queries draaien: 1 om de uitvoeringentabel te vullen en 1 om de optietabel te vullen. Die tweede query zou prima de volgende vorm kunnen hebben:
De UitvoeringID's zijn natuurlijk veranderlijk, dus zou ik de query als volgt willen maken:
Het lijkt er echter sterk op dat dit niet gaat lukken, omdat ik een soort array van integers als parametertype moet meegeven om dit werkend te krijgen. Mijn vraag is: is dit toch mogelijk? Zo ja: hoe? En zo niet: wat zijn de beste alternatieven?
Een alternatief is om de query met stringconcatenatie op te bouwen, maar hierbij verlies je alle voordelen van een parameterized query (o.a. bescherming tegen SQL injection attack, performance). Een ander alternatief is om voor iedere regel uit Uitvoering een losse query te doen op Optie, maar zo kan het aantal queries snel oplopen. Zie ik andere (lees: betere) alternatieven over het hoofd?
NB: Het datamodel en de queries zijn veel ingewikkelder dat bovenstaande query, maar deze versimpelde query is representatief genoeg om het probleem duidelijk te maken.
Edit: Vergeten te vermelden
Uit oogpunt van efficientie, wil ik slechts 2 queries draaien: 1 om de uitvoeringentabel te vullen en 1 om de optietabel te vullen. Die tweede query zou prima de volgende vorm kunnen hebben:
SQL:
1
2
| SELECT * FROM Optie WHERE UitvoeringID IN (100, 2313, 937) |
De UitvoeringID's zijn natuurlijk veranderlijk, dus zou ik de query als volgt willen maken:
SQL:
1
2
| SELECT * FROM Optie WHERE UitvoeringID IN (@UitvoeringIDs) |
Het lijkt er echter sterk op dat dit niet gaat lukken, omdat ik een soort array van integers als parametertype moet meegeven om dit werkend te krijgen. Mijn vraag is: is dit toch mogelijk? Zo ja: hoe? En zo niet: wat zijn de beste alternatieven?
Een alternatief is om de query met stringconcatenatie op te bouwen, maar hierbij verlies je alle voordelen van een parameterized query (o.a. bescherming tegen SQL injection attack, performance). Een ander alternatief is om voor iedere regel uit Uitvoering een losse query te doen op Optie, maar zo kan het aantal queries snel oplopen. Zie ik andere (lees: betere) alternatieven over het hoofd?
NB: Het datamodel en de queries zijn veel ingewikkelder dat bovenstaande query, maar deze versimpelde query is representatief genoeg om het probleem duidelijk te maken.
[ Voor 6% gewijzigd door Verwijderd op 15-09-2006 08:56 . Reden: type DB toegevoegd ]