Så du har en kommaseparerad lista, och nu måste du infoga den i databasen. Men saken är att du måste infoga varje värde i listan i sin egen tabellrad. Så i princip måste du dela upp listan i separata värden och sedan infoga vart och ett av dessa värden i en ny rad.
T-SQL har nu en STRING_SPLIT()
funktion som gör denna typ av operation till en lek. Den här funktionen var först tillgänglig i SQL Server 2016 och är tillgänglig på databaser med en kompatibilitetsnivå på 130 eller högre (hur du kontrollerar din databaskompatibilitetsnivå och hur du ändrar den).
Exempel
Låt oss säga att vi har följande kommaavgränsade lista:
Cat,Dog,Rabbit
Vi kan använda STRING_SPLIT()
funktion för att separera varje värde i en egen rad. Så här:
SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
Resultat:
value ------ Cat Dog Rabbit
Så vi är redan halvvägs. Beroende på dina krav kan detta vara allt du behöver.
Infoga värdena i en tabell
Vi kan ta ovanstående kod och använda den med en INSERT()
påstående. Med andra ord kan vi infoga dessa värden i en tabell, och varje listobjekt kommer att finnas i sin egen rad. För att göra detta kan vi helt enkelt prefixa den föregående koden med en INSERT()
uttalande.
Exempel:
INSERT INTO Animals (AnimalName) SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
Detta infogar varje värde i sin egen rad i AnimalName
kolumnen i Animals
bord.
Kontrollera resultaten
För att kontrollera resultaten, kör en SELECT
uttalande mot tabellen:
SELECT * FROM Animals;
Resultat:
AnimalId AnimalName -------- ---------- 1 Cat 2 Dog 3 Rabbit
Detta resultat förutsätter att AnimalId
kolumnen är en IDENTITY
kolumn (ökande värden infogas automatiskt med varje ny rad).
Det fullständiga skriptet
Här är ett skript som låter dig göra exemplet ovan på en gång. Den skapar databasen, skapar tabellen, infogar data och kontrollerar sedan resultaten.
Skapa 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;