Erland Sommarskog podtrzymał autorytatywną odpowiedź na to pytanie przez ostatnie 16 lat:Tablice i listy w SQL Server .
Istnieje co najmniej kilkanaście sposobów przekazania tablicy lub listy do zapytania; każdy ma swoje unikalne zalety i wady.
- Parametry wyceniane w tabeli. Tylko SQL Server 2008 i nowszy, prawdopodobnie najbliższy uniwersalnemu „najlepszemu” podejściu.
- Metoda iteracyjna. Przeciągnij oddzielony ciąg i wykonaj pętlę przez niego.
- Korzystanie z CLR. SQL Server 2005 i nowsze wersje tylko z języków .NET.
- XML. Bardzo dobry do wstawiania wielu rzędów; może być przesadą dla SELECTów.
- Tabela liczb. Wyższa wydajność/złożoność niż prosta metoda iteracyjna.
- Elementy o stałej długości. Stała długość poprawia prędkość nad oddzielonym ciągiem
- Funkcja liczb. Odmiany tabeli liczb i stałej długości, w których liczby są generowane w funkcji, a nie pobierane z tabeli.
- Rekurencyjne wyrażenie wspólnej tabeli (CTE). SQL Server 2005 i nowszy, wciąż niezbyt złożony i wyższa wydajność niż metoda iteracyjna.
- Dynamiczny SQL. Może być powolny i ma wpływ na bezpieczeństwo.
- Przekazywanie listy wielu parametrów. Żmudne i podatne na błędy, ale proste.
- Naprawdę wolne metody. Metody wykorzystujące charindex, patindex lub LIKE.
Naprawdę nie mogę wystarczająco polecić, aby przeczytać artykuł, aby dowiedzieć się o kompromisach między wszystkimi tymi opcjami.