Nyní existuje 4. možnost – parametry s hodnotou tabulky , čímž můžete skutečně předat tabulku hodnot do sproc jako parametr a pak ji použít jako normálně proměnnou tabulky. Dávám přednost tomuto přístupu před přístupem XML (nebo přístupem analýzy CSV)
Nemohu citovat údaje o výkonu mezi všemi různými přístupy, ale o to bych se pokusil – doporučoval bych na nich provést nějaké skutečné testy výkonu.
Upravit:
Trochu více o TVP. Aby bylo možné předat hodnoty do vašeho sproc, stačí definovat SqlParameter (SqlDbType.Structured) - hodnotu lze nastavit na jakýkoli zdroj IEnumerable, DataTable nebo DbDataReader. Pravděpodobně tedy již máte seznam hodnot v nějakém seznamu/poli – pro jeho transformaci do XML nebo CSV nemusíte nic dělat.
Myslím, že to také dělá sproc jasnější, jednodušší a udržitelnější, což poskytuje přirozenější způsob, jak dosáhnout konečného výsledku. Jedním z hlavních bodů je, že SQL si vede nejlépe při činnostech s manipulací s řetězci/bez smyčky/bez řetězců.
To neznamená, že bude fungovat skvěle s velkou sadou předávaných hodnot. Ale s menšími sadami (až ~1000) by to mělo být v pořádku.