Erland Sommarskog udržuje směrodatnou odpověď na tuto otázku již 16 let:Pole a seznamy na serveru SQL Server .
Existuje alespoň tucet způsobů, jak předat pole nebo seznam dotazu; každý má své vlastní jedinečné klady a zápory.
- Parametry s hodnotou tabulky. Pouze SQL Server 2008 a vyšší a pravděpodobně nejblíže univerzálnímu „nejlepšímu“ přístupu.
- Iterativní metoda. Protáhněte ohraničený řetězec a protáhněte jej.
- Pomocí CLR. SQL Server 2005 a vyšší pouze z jazyků .NET.
- XML. Velmi dobré pro vkládání mnoha řádků; může být pro SELECT přehnané.
- Tabulka čísel. Vyšší výkon/složitost než jednoduchá iterativní metoda.
- Prvky s pevnou délkou. Pevná délka zvyšuje rychlost oproti oddělovacímu řetězci
- Funkce čísel. Variace tabulky čísel a pevná délka, kde jsou čísla generována ve funkci, nikoli převzata z tabulky.
- Rekurzivní společný tabulkový výraz (CTE). SQL Server 2005 a vyšší, stále není příliš složitý a má vyšší výkon než iterační metoda.
- Dynamické SQL. Může být pomalý a má bezpečnostní důsledky.
- Předání seznamu jako mnoho parametrů. Zdlouhavé a náchylné k chybám, ale jednoduché.
- Opravdu pomalé metody. Metody, které používají charindex, patindex nebo LIKE.
Opravdu nemohu dostatečně doporučit, abych si přečetl článek, abych se dozvěděl o kompromisech mezi všemi těmito možnostmi.