Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come convertire un elenco separato da virgole in righe in SQL Server

Quindi hai un elenco separato da virgole e ora devi inserirlo nel database. Ma il fatto è che devi inserire ogni valore nell'elenco nella propria riga della tabella. Quindi, in pratica, devi dividere l'elenco nei suoi valori separati, quindi inserire ciascuno di questi valori in una nuova riga.

T-SQL ora ha un STRING_SPLIT() funzione che rende questo tipo di operazione un gioco da ragazzi. Questa funzione era disponibile per la prima volta in SQL Server 2016 ed è disponibile su database con un livello di compatibilità pari o superiore a 130 (come verificare il livello di compatibilità del database e come modificarlo).

Esempio

Supponiamo di avere il seguente elenco delimitato da virgole:

Cat,Dog,Rabbit

Possiamo usare il STRING_SPLIT() funzione per separare ogni valore nella propria riga. In questo modo:

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

Risultato:

value 
------
Cat   
Dog   
Rabbit

Quindi siamo già a metà strada. In effetti, a seconda delle tue esigenze, questo potrebbe essere tutto ciò di cui hai bisogno.

Inserisci i valori in una tabella

Possiamo prendere il codice sopra e usarlo con un INSERT() dichiarazione. In altre parole, possiamo inserire quei valori in una tabella e ogni elemento dell'elenco risiederà nella propria riga. Per fare ciò, possiamo semplicemente anteporre al codice precedente un INSERT() dichiarazione.

Esempio:

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

In questo modo ogni valore viene inserito nella propria riga in AnimalName colonna degli Animals tabella.

Controlla i risultati

Per controllare i risultati, esegui un SELECT dichiarazione contro il tavolo:

SELECT * 
FROM Animals;

Risultato:

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

Questo risultato presuppone che AnimalId la colonna è un IDENTITY colonna (i valori incrementali vengono inseriti automaticamente ad ogni nuova riga).

Il copione completo

Ecco uno script che ti consente di eseguire l'esempio sopra in una volta sola. Crea il database, crea la tabella, inserisce i dati, quindi controlla i risultati.

Crea il database:

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

Fai il resto:

/* 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;