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;