Máte tedy seznam oddělený čárkami a nyní jej musíte vložit do databáze. Jde ale o to, že každou hodnotu v seznamu musíte vložit do vlastního řádku tabulky. V zásadě tedy musíte seznam rozdělit na samostatné hodnoty a poté každou z těchto hodnot vložit do nového řádku.
T-SQL má nyní STRING_SPLIT()
funkce, díky které je tento typ operace hračkou. Tato funkce byla poprvé dostupná v SQL Server 2016 a je dostupná u databází s úrovní kompatibility 130 nebo vyšší (jak zkontrolovat úroveň kompatibility databáze a jak ji změnit).
Příklad
Řekněme, že máme následující seznam oddělený čárkami:
Cat,Dog,Rabbit
Můžeme použít STRING_SPLIT()
funkce pro oddělení každé hodnoty do vlastního řádku. Takhle:
SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
Výsledek:
value ------ Cat Dog Rabbit
Takže už jsme v polovině. Ve skutečnosti, v závislosti na vašich požadavcích, to může být vše, co potřebujete.
Vložte hodnoty do tabulky
Můžeme vzít výše uvedený kód a použít jej s INSERT()
prohlášení. Jinými slovy, můžeme tyto hodnoty vložit do tabulky a každá položka seznamu bude umístěna na svém vlastním řádku. Chcete-li to provést, stačí před předchozí kód přidat INSERT()
prohlášení.
Příklad:
INSERT INTO Animals (AnimalName) SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
Tím se každá hodnota vloží do vlastního řádku v AnimalName
ve sloupci Animals
tabulka.
Zkontrolujte výsledky
Chcete-li zkontrolovat výsledky, spusťte SELECT
prohlášení proti tabulce:
SELECT * FROM Animals;
Výsledek:
AnimalId AnimalName -------- ---------- 1 Cat 2 Dog 3 Rabbit
Tento výsledek předpokládá, že AnimalId
sloupec je IDENTITY
sloupec (s každým novým řádkem se automaticky vkládají přírůstkové hodnoty).
Úplný skript
Zde je skript, který vám umožní provést výše uvedený příklad najednou. Vytvoří databázi, vytvoří tabulku, vloží data a poté zkontroluje výsledky.
Vytvořte databázi:
/* Create database */ USE master; CREATE DATABASE Nature;
Udělejte zbytek:
/* 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;