Tento článek představuje dva způsoby výběru řádků na základě seznamu ID (nebo jiných hodnot) na serveru SQL Server. To může být užitečné v situacích, kdy máte seznam ID oddělených čárkami a chcete v databázi vyhledat řádky, které těmto ID odpovídají.
Řekněme, že máte následující seznam ID:
1,4,6,8
A tak nyní chcete v tabulce dotazovat záznamy, které mají ve sloupci ID některou z těchto hodnot (tj. buď 1, 4, 6 nebo 8).
Zde jsou dva způsoby, jak toho dosáhnout.
Možnost 1:Operátor IN
Jednou z možností je použít IN
operátor ve vašem dotazu vrátí pouze ty řádky, které jsou uvedeny v seznamu.
SELECT ArtistId, ArtistName FROM Artists WHERE ArtistId IN (1,4,6,8);
Výsledky:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Jak můžete vidět, hodnoty v ArtistId
sloupec odpovídá těm z našeho seznamu.
Možnost 2:Funkce STRING_SPLIT()
Počínaje SQL Serverem 2016, STRING_SPLIT()
funkci lze použít k rozdělení znakového výrazu pomocí zadaného oddělovače. Jinými slovy, můžete jej použít k rozdělení seznamu odděleného čárkami.
Zde je příklad používající stejná data jako v předchozím příkladu:
SELECT ArtistId, ArtistName FROM Artists JOIN STRING_SPLIT('1,4,6,8', ',') ON value = ArtistId;
Výsledek:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Jedna výhoda STRING_SPLIT()
je, že vám umožňuje/(vyžaduje) určit, co se používá jako oddělovač pro seznam. To může být užitečné, když váš seznam používá jako oddělovač jiný znak.
Zde je stejný příklad, ale pro seznam oddělený mezerami:
SELECT ArtistId, ArtistName FROM Artists JOIN STRING_SPLIT('1 4 6 8', ' ') ON value = ArtistId;
Výsledek:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Úroveň kompatibility
Všimněte si, že STRING_SPLIT()
je k dispozici pouze u databází s úrovní kompatibility 130 nebo vyšší. Úroveň kompatibility databáze můžete změnit následujícím příkazem:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;
Nebo jej převést na úroveň SQL Server 2017:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;
Kde MyDatabase
je název databáze.
Viz také Jak zkontrolovat úroveň kompatibility databáze na serveru SQL.