Dostępna jest teraz czwarta opcja — parametry o wartościach w tabeli , dzięki czemu można faktycznie przekazać tabelę wartości do sproc jako parametr, a następnie użyć jej tak, jak zwykle zmiennej tabeli. Wolałbym to podejście niż podejście XML (lub podejście do analizy CSV)
Nie mogę przytoczyć danych dotyczących wydajności między wszystkimi różnymi podejściami, ale to właśnie próbowałbym - polecam wykonanie na nich prawdziwych testów wydajności.
Edytuj:
Trochę więcej w TVP. Aby przekazać wartości do swojego sproc, wystarczy zdefiniować SqlParameter (SqlDbType.Structured) — wartość tego można ustawić na dowolne źródło IEnumerable, DataTable lub DbDataReader. Tak więc przypuszczalnie masz już listę wartości na jakiejś liście/tablicy - nie musisz nic robić, aby przekształcić ją w XML lub CSV.
Myślę, że dzięki temu sproc jest bardziej przejrzysty, prostszy i łatwiejszy w utrzymaniu, zapewniając bardziej naturalny sposób na osiągnięcie efektu końcowego. Jednym z głównych punktów jest to, że SQL najlepiej sprawdza się w działaniach opartych na zbiorach/bez pętli/bez manipulacji ciągami.
Nie oznacza to, że będzie działać świetnie z dużym zestawem przekazywanych wartości. Ale przy mniejszych zestawach (do ~1000) powinno być dobrze.