Den här artikeln presenterar två sätt att välja rader baserat på en lista med ID:n (eller andra värden) i SQL Server. Detta kan vara användbart i scenarier där du har en kommaseparerad lista med ID:n och du vill fråga din databas efter rader som matchar dessa ID:n.
Säg att du har följande lista med ID:n:
1,4,6,8
Och så du vill nu fråga en tabell för poster som har något av dessa värden (dvs. antingen 1, 4, 6 eller 8) i dess ID-kolumn.
Här är två sätt att gå tillväga.
Alternativ 1:IN-operatören
Ett alternativ är att använda IN
operatorn i din fråga för att endast returnera de rader som anges i listan.
SELECT ArtistId, ArtistName FROM Artists WHERE ArtistId IN (1,4,6,8);
Resultat:
ArtistId ArtistName -------- ------------------------- 1 Iron Maiden 4 Buddy Rich 6 Jim Reeves 8 Maroon 5
Som du kan se är värdena i ArtistId
kolumnen matchar de i listan.
Alternativ 2:STRING_SPLIT()-funktionen
Från och med SQL Server 2016, STRING_SPLIT()
funktion kan användas för att dela upp ett teckenuttryck med en specificerad avgränsare. Med andra ord kan du använda den för att dela upp en kommaavgränsad lista.
Här är ett exempel som använder samma data som i föregående exempel:
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 fördel med STRING_SPLIT()
är att det tillåter/(kräver) att du kan ange vad som används som avgränsare för listan. Detta kan vara praktiskt när din lista använder ett annat tecken som avgränsare.
Här är samma exempel, men för en blankstegsseparerad lista:
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
Kompatibilitetsnivå
Observera att STRING_SPLIT()
är endast tillgänglig på databaser med en kompatibilitetsnivå på 130 eller högre. Du kan ändra en databas kompatibilitetsnivå med följande uttalande:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;
Eller för att få upp den till SQL Server 2017-nivå:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;
Var MyDatabase
är namnet på databasen.
Se även Hur man kontrollerar en databas kompatibilitetsnivå i SQL Server.