Тази статия представя два начина за избор на редове въз основа на списък с идентификатори (или други стойности) в SQL Server. Това може да бъде полезно в сценарии, при които имате разделен със запетая списък с идентификатори и искате да потърсите в базата си данни за редове, които съвпадат с тези идентификатори.
Да приемем, че имате следния списък с идентификатори:
1,4,6,8
И така, сега искате да направите заявка в таблица за записи, които имат някоя от тези стойности (т.е. 1, 4, 6 или 8) в колоната с идентификатор.
Ето два начина да направите това.
Опция 1:IN оператор
Една от опциите е да използвате IN
оператор в рамките на вашата заявка, за да върнете само онези редове, които са посочени в списъка.
SELECT ArtistId, ArtistName FROM Artists WHERE ArtistId IN (1,4,6,8);
Резултати:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Както можете да видите, стойностите в ArtistId
колона съвпада с тези в нашия списък.
Опция 2:Функцията STRING_SPLIT()
Започвайки от SQL Server 2016, STRING_SPLIT()
функцията може да се използва за разделяне на символен израз с помощта на определен разделител. С други думи, можете да го използвате, за да разделите списък, разделен със запетая.
Ето пример, използващ същите данни като в предишния пример:
SELECT ArtistId, ArtistName FROM Artists JOIN STRING_SPLIT('1,4,6,8', ',') ON value = ArtistId;
Резултат:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Едно предимство на STRING_SPLIT()
е, че позволява/(изисква) да посочите какво се използва като разделител за списъка. Това може да е удобно, когато списъкът ви използва различен знак като разделител.
Ето същия пример, но за списък, разделен с интервал:
SELECT ArtistId, ArtistName FROM Artists JOIN STRING_SPLIT('1 4 6 8', ' ') ON value = ArtistId;
Резултат:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Ниво на съвместимост
Обърнете внимание, че STRING_SPLIT()
е наличен само в бази данни с ниво на съвместимост от 130 или по-високо. Можете да промените нивото на съвместимост на базата данни със следното изявление:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;
Или за да го изведете до ниво SQL Server 2017:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;
Където MyDatabase
е името на базата данни.
Вижте също как да проверите нивото на съвместимост на база данни в SQL Server.