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

Sådan konverteres en kommasepareret liste til rækker i SQL Server

Så du har en kommasepareret liste, og nu skal du indsætte den i databasen. Men sagen er, at du skal indsætte hver værdi i listen i sin egen tabelrække. Så dybest set skal du opdele listen i dens separate værdier og derefter indsætte hver enkelt af disse værdier i en ny række.

T-SQL har nu en STRING_SPLIT() funktion, der gør denne type operationer til en leg. Denne funktion var først tilgængelig i SQL Server 2016 og er tilgængelig på databaser med et kompatibilitetsniveau på 130 eller derover (hvordan du tjekker dit databasekompatibilitetsniveau, og hvordan du ændrer det).

Eksempel

Lad os sige, at vi har følgende kommaseparerede liste:

Cat,Dog,Rabbit

Vi kan bruge STRING_SPLIT() funktion til at adskille hver værdi i sin egen række. Sådan:

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

Resultat:

value 
------
Cat   
Dog   
Rabbit

Så vi er allerede halvvejs. Faktisk, afhængigt af dine krav, kan dette være alt, hvad du behøver.

Indsæt værdierne i en tabel

Vi kan tage ovenstående kode og bruge den med en INSERT() udmelding. Med andre ord kan vi indsætte disse værdier i en tabel, og hvert listeelement vil ligge i sin egen række. For at gøre dette kan vi blot præfikse den forrige kode med en INSERT() erklæring.

Eksempel:

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

Dette indsætter hver værdi i sin egen række i AnimalName kolonne i Animals tabel.

Tjek resultaterne

For at kontrollere resultaterne skal du køre en SELECT udsagn mod tabellen:

SELECT * 
FROM Animals;

Resultat:

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

Dette resultat antager, at AnimalId kolonne er en IDENTITY kolonne (stigningsværdier indsættes automatisk med hver ny række).

Det fulde script

Her er et script, der giver dig mulighed for at udføre ovenstående eksempel på én gang. Den opretter databasen, opretter tabellen, indsætter dataene og kontrollerer derefter resultaterne.

Opret databasen:

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

Gør resten:

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

  1. Kan jeg automatisk oprette en tabel i PostgreSQL fra en csv-fil med overskrifter?

  2. Hvordan serialiserer jeg en stor graf af .NET objekt til en SQL Server BLOB uden at oprette en stor buffer?

  3. SQL Server - Bedste måde at få identitet for indsat række?

  4. TIMEDIFF() Eksempler – MySQL