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

Comment convertir une liste séparée par des virgules en lignes dans SQL Server

Vous avez donc une liste séparée par des virgules et vous devez maintenant l'insérer dans la base de données. Mais le fait est que vous devez insérer chaque valeur de la liste dans sa propre ligne de tableau. Donc, fondamentalement, vous devez diviser la liste en ses valeurs distinctes, puis insérer chacune de ces valeurs dans une nouvelle ligne.

T-SQL a maintenant un STRING_SPLIT() fonction qui rend ce type d'opération un jeu d'enfant. Cette fonction a été disponible pour la première fois dans SQL Server 2016 et est disponible sur les bases de données avec un niveau de compatibilité de 130 ou supérieur (comment vérifier le niveau de compatibilité de votre base de données et comment le modifier).

Exemple

Disons que nous avons la liste délimitée par des virgules suivante :

Cat,Dog,Rabbit

Nous pouvons utiliser le STRING_SPLIT() fonction pour séparer chaque valeur dans sa propre ligne. Comme ceci :

SELECT value 
FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');

Résultat :

value 
------
Cat   
Dog   
Rabbit

Nous sommes donc déjà à mi-chemin. En fait, selon vos besoins, cela pourrait être tout ce dont vous avez besoin.

Insérer les valeurs dans un tableau

Nous pouvons prendre le code ci-dessus et l'utiliser avec un INSERT() déclaration. En d'autres termes, nous pouvons insérer ces valeurs dans un tableau, et chaque élément de la liste résidera dans sa propre ligne. Pour ce faire, nous pouvons simplement préfixer le code précédent avec un INSERT() déclaration.

Exemple :

INSERT INTO Animals (AnimalName)
SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');

Cela insère chaque valeur dans sa propre ligne dans le AnimalName colonne des Animals tableau.

Vérifiez les résultats

Pour vérifier les résultats, exécutez un SELECT déclaration contre la table :

SELECT * 
FROM Animals;

Résultat :

AnimalId  AnimalName
--------  ----------
1         Cat       
2         Dog       
3         Rabbit    

Ce résultat suppose que le AnimalId la colonne est une IDENTITY colonne (les valeurs incrémentielles sont insérées automatiquement à chaque nouvelle ligne).

Le script complet

Voici un script qui vous permet de faire l'exemple ci-dessus en une seule fois. Il crée la base de données, crée la table, insère les données, puis vérifie les résultats.

Créez la base de données :

/* Create database */
USE master;
CREATE DATABASE Nature;

Faites le reste :

/* Create table */
USE Nature;
CREATE TABLE Animals (
  AnimalId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  AnimalName nvarchar(255) NOT NULL
);

/* Insert data from the list */
INSERT INTO Animals (AnimalName)
SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');

/* Check the result */
SELECT * FROM Animals;