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;