Denne artikel præsenterer to måder at vælge rækker på baseret på en liste over id'er (eller andre værdier) i SQL Server. Dette kan være nyttigt i scenarier, hvor du har en kommasepareret liste over id'er, og du vil forespørge i din database for rækker, der matcher disse id'er.
Lad os sige, at du har følgende liste over id'er:
1,4,6,8
Og så vil du nu forespørge i en tabel for poster, der har nogen af disse værdier (dvs. enten 1, 4, 6 eller 8) i dens ID-kolonne.
Her er to måder at gøre det på.
Mulighed 1:IN-operatøren
En mulighed er at bruge IN
operator i din forespørgsel for kun at returnere de rækker, der er angivet på listen.
SELECT ArtistId, ArtistName FROM Artists WHERE ArtistId IN (1,4,6,8);
Resultater:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Som du kan se, er værdierne i ArtistId
kolonne matche dem på listen.
Mulighed 2:STRING_SPLIT()-funktionen
Startende med SQL Server 2016, STRING_SPLIT()
funktion kan bruges til at opdele et tegnudtryk ved hjælp af en specificeret separator. Med andre ord kan du bruge den til at opdele en kommasepareret liste.
Her er et eksempel, der bruger de samme data som i det foregående eksempel:
SELECT ArtistId, ArtistName FROM Artists JOIN STRING_SPLIT('1,4,6,8', ',') ON value = ArtistId;
Resultat:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
En fordel ved STRING_SPLIT()
er, at det tillader/(kræver) at du angiver, hvad der bruges som afgrænsning for listen. Dette kan være praktisk, når din liste bruger et andet tegn som afgrænsning.
Her er det samme eksempel, men for en mellemrumsadskilt liste:
SELECT ArtistId, ArtistName FROM Artists JOIN STRING_SPLIT('1 4 6 8', ' ') ON value = ArtistId;
Resultat:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Kompatibilitetsniveau
Bemærk, at STRING_SPLIT()
er kun tilgængelig på databaser med et kompatibilitetsniveau på 130 eller derover. Du kan ændre en databases kompatibilitetsniveau med følgende sætning:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;
Eller for at bringe det op til SQL Server 2017-niveau:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;
Hvor MyDatabase
er navnet på databasen.
Se også Sådan tjekker du en databases kompatibilitetsniveau i SQL Server.