W tym artykule przedstawiono dwa sposoby wybierania wierszy na podstawie listy identyfikatorów (lub innych wartości) w programie SQL Server. Może to być przydatne w sytuacjach, w których masz listę identyfikatorów oddzielonych przecinkami i chcesz przeszukać bazę danych w poszukiwaniu wierszy, które pasują do tych identyfikatorów.
Załóżmy, że masz następującą listę identyfikatorów:
1,4,6,8
Dlatego teraz chcesz zapytać tabelę o rekordy, które mają dowolną z tych wartości (tj. 1, 4, 6 lub 8) w kolumnie ID.
Oto dwa sposoby na zrobienie tego.
Opcja 1:Operator IN
Jedną z opcji jest użycie IN
operatora w zapytaniu, aby zwrócić tylko te wiersze, które są określone na liście.
SELECT ArtistId, ArtistName FROM Artists WHERE ArtistId IN (1,4,6,8);
Wyniki:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Jak widać, wartości w ArtistId
kolumna pasuje do tych z naszej listy.
Opcja 2:Funkcja STRING_SPLIT()
Począwszy od SQL Server 2016, STRING_SPLIT()
Funkcja może służyć do dzielenia wyrażenia znakowego przy użyciu określonego separatora. Innymi słowy, możesz go użyć do podzielenia listy rozdzielanej przecinkami.
Oto przykład wykorzystujący te same dane, co w poprzednim przykładzie:
SELECT ArtistId, ArtistName FROM Artists JOIN STRING_SPLIT('1,4,6,8', ',') ON value = ArtistId;
Wynik:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Jedna z zalet STRING_SPLIT()
jest to, że pozwala/(wymaga) określić, co jest używane jako ogranicznik dla listy. Może to być przydatne, gdy Twoja lista używa innego znaku jako ogranicznika.
Oto ten sam przykład, ale dla listy oddzielonej spacjami:
SELECT ArtistId, ArtistName FROM Artists JOIN STRING_SPLIT('1 4 6 8', ' ') ON value = ArtistId;
Wynik:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Poziom zgodności
Zauważ, że STRING_SPLIT()
jest dostępna tylko w bazach danych o poziomie zgodności 130 lub wyższym. Możesz zmienić poziom zgodności bazy danych za pomocą następującej instrukcji:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;
Lub podnieś go do poziomu SQL Server 2017:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;
Gdzie MyDatabase
to nazwa bazy danych.
Zobacz także Jak sprawdzić poziom zgodności bazy danych w SQL Server.