Er is nu een vierde optie - tabel gewaardeerd parameters , waarbij je een tabel met waarden daadwerkelijk als parameter aan een sproc kunt doorgeven en die vervolgens kunt gebruiken zoals je normaal gesproken een tabelvariabele zou doen. Ik zou deze benadering verkiezen boven de XML (of CSV-parseerbenadering)
Ik kan geen prestatiecijfers geven tussen alle verschillende benaderingen, maar dat is er een die ik zou proberen - ik zou aanraden om er een paar echte prestatietests op uit te voeren.
Bewerken:
Een beetje meer over TVP's. Om de waarden door te geven aan uw sproc, definieert u gewoon een SqlParameter (SqlDbType.Structured) - de waarde hiervan kan worden ingesteld op elke IEnumerable-, DataTable- of DbDataReader-bron. Dus vermoedelijk heb je de lijst met waarden al in een lijst/array van een soort - je hoeft niets te doen om het om te zetten in XML of CSV.
Ik denk dat dit de sproc ook duidelijker, eenvoudiger en beter onderhoudbaar maakt, wat een meer natuurlijke manier biedt om het eindresultaat te bereiken. Een van de belangrijkste punten is dat SQL het beste presteert op set-gebaseerde/niet-looping/niet-string manipulatie-activiteiten.
Dat wil niet zeggen dat het geweldig zal presteren met een grote reeks ingevoerde waarden. Maar met kleinere sets (tot ~1000) zou het goed moeten zijn.