Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So konvertieren Sie eine durch Kommas getrennte Liste in Zeilen in SQL Server

Sie haben also eine durch Kommas getrennte Liste, die Sie jetzt in die Datenbank einfügen müssen. Aber die Sache ist die, dass Sie jeden Wert in der Liste in eine eigene Tabellenzeile einfügen müssen. Im Grunde müssen Sie also die Liste in ihre einzelnen Werte aufteilen und dann jeden dieser Werte in eine neue Zeile einfügen.

T-SQL hat jetzt einen STRING_SPLIT() Funktion, die diese Art der Bedienung zum Kinderspiel macht. Diese Funktion war erstmals in SQL Server 2016 verfügbar und ist für Datenbanken mit einem Kompatibilitätsgrad von 130 oder höher verfügbar (wie Sie Ihren Datenbank-Kompatibilitätsgrad überprüfen und wie Sie ihn ändern).

Beispiel

Nehmen wir an, wir haben die folgende durch Kommas getrennte Liste:

Cat,Dog,Rabbit

Wir können den STRING_SPLIT() verwenden Funktion, um jeden Wert in eine eigene Zeile zu unterteilen. So:

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

Ergebnis:

value 
------
Cat   
Dog   
Rabbit

Wir sind also schon auf halbem Weg. Abhängig von Ihren Anforderungen könnte dies sogar alles sein, was Sie brauchen.

Fügen Sie die Werte in eine Tabelle ein

Wir können den obigen Code nehmen und ihn mit einem INSERT() verwenden Erklärung. Mit anderen Worten, wir können diese Werte in eine Tabelle einfügen, und jedes Listenelement befindet sich in einer eigenen Zeile. Dazu können wir dem vorherigen Code einfach ein INSERT() voranstellen Aussage.

Beispiel:

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

Dadurch wird jeder Wert in eine eigene Zeile im AnimalName eingefügt Spalte der Animals Tabelle.

Überprüfen Sie die Ergebnisse

Um die Ergebnisse zu überprüfen, führen Sie ein SELECT aus Anweisung gegen die Tabelle:

SELECT * 
FROM Animals;

Ergebnis:

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

Dieses Ergebnis setzt voraus, dass die AnimalId Spalte ist eine IDENTITY Spalte (aufsteigende Werte werden automatisch mit jeder neuen Zeile eingefügt).

Das vollständige Skript

Hier ist ein Skript, mit dem Sie das obige Beispiel in einem Rutsch ausführen können. Es erstellt die Datenbank, erstellt die Tabelle, fügt die Daten ein und überprüft dann die Ergebnisse.

Erstellen Sie die Datenbank:

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

Den Rest erledigen:

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