Database
 sql >> Base de données >  >> RDS >> Database

2 façons de sélectionner des lignes correspondant à tous les éléments d'une liste (T-SQL)

Cet article présente deux façons de sélectionner des lignes en fonction d'une liste d'ID (ou d'autres valeurs) dans SQL Server. Cela peut être utile dans les scénarios où vous disposez d'une liste d'ID séparés par des virgules et que vous souhaitez interroger votre base de données pour les lignes correspondant à ces ID.

Supposons que vous disposiez de la liste d'identifiants suivante :

1,4,6,8

Et donc vous voulez maintenant interroger une table pour les enregistrements qui ont l'une de ces valeurs (c'est-à-dire 1, 4, 6 ou 8) dans sa colonne ID.

Voici deux façons de procéder.

Option 1 :L'opérateur IN

Une option consiste à utiliser le IN opérateur dans votre requête pour renvoyer uniquement les lignes spécifiées dans la liste.

SELECT ArtistId, ArtistName
FROM Artists
WHERE ArtistId IN (1,4,6,8);

Résultats :

ArtistId  ArtistName               
--------  -------------------------
1         Iron Maiden              
4         Buddy Rich               
6         Jim Reeves               
8         Maroon 5                 

Comme vous pouvez le voir, les valeurs dans ArtistId colonne correspondent à celles de notre liste.

Option 2 :la fonction STRING_SPLIT()

À partir de SQL Server 2016, le STRING_SPLIT() La fonction peut être utilisée pour diviser une expression de caractère à l'aide d'un séparateur spécifié. En d'autres termes, vous pouvez l'utiliser pour diviser une liste délimitée par des virgules.

Voici un exemple utilisant les mêmes données que dans l'exemple précédent :

SELECT ArtistId, ArtistName
FROM Artists
JOIN STRING_SPLIT('1,4,6,8', ',')
ON value = ArtistId;

Résultat :

ArtistId  ArtistName               
--------  -------------------------
1         Iron Maiden              
4         Buddy Rich               
6         Jim Reeves               
8         Maroon 5                 

Un avantage de  STRING_SPLIT() est qu'il vous permet/(exige) de spécifier ce qui est utilisé comme délimiteur pour la liste. Cela peut être pratique lorsque votre liste utilise un caractère différent comme délimiteur.

Voici le même exemple, mais pour une liste séparée par des espaces :

SELECT ArtistId, ArtistName 
FROM Artists JOIN STRING_SPLIT('1 4 6 8', ' ') 
ON value = ArtistId;

Résultat :

ArtistId  ArtistName               
--------  -------------------------
1         Iron Maiden              
4         Buddy Rich               
6         Jim Reeves               
8         Maroon 5                 

Niveau de compatibilité

Notez que STRING_SPLIT() n'est disponible que sur les bases de données avec un niveau de compatibilité de 130 ou plus. Vous pouvez modifier le niveau de compatibilité d'une base de données avec l'instruction suivante :

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;

Ou pour le mettre au niveau SQL Server 2017 :

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;

Où MyDatabase est le nom de la base de données.

Voir également Comment vérifier le niveau de compatibilité d'une base de données dans SQL Server.