sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man konverterar en kommaseparerad lista till rader i SQL Server

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;

  1. Postgres och index på främmande nycklar och primärnycklar

  2. MySQL Group av SUM

  3. SLIPP TABELL OM FINNS i MariaDB

  4. bra postgresql-klient för Windows?