Masz więc listę oddzieloną przecinkami, a teraz musisz ją wstawić do bazy danych. Ale chodzi o to, że musisz wstawić każdą wartość z listy do własnego wiersza tabeli. Zasadniczo musisz podzielić listę na osobne wartości, a następnie wstawić każdą z tych wartości do nowego wiersza.
T-SQL ma teraz funkcję STRING_SPLIT()
funkcja, która sprawia, że tego typu operacje są dziecinnie proste. Ta funkcja była po raz pierwszy dostępna w SQL Server 2016 i jest dostępna w bazach danych o poziomie zgodności 130 lub wyższym (jak sprawdzić poziom zgodności bazy danych i jak go zmienić).
Przykład
Załóżmy, że mamy następującą listę rozdzielaną przecinkami:
Cat,Dog,Rabbit
Możemy użyć STRING_SPLIT()
funkcji, aby oddzielić każdą wartość do własnego wiersza. Tak:
SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
Wynik:
value ------ Cat Dog Rabbit
Więc jesteśmy już w połowie drogi. W rzeczywistości, w zależności od Twoich wymagań, może to być wszystko, czego potrzebujesz.
Wstaw wartości do tabeli
Możemy wziąć powyższy kod i użyć go z INSERT()
oświadczenie. Innymi słowy, możemy wstawić te wartości do tabeli, a każdy element listy będzie znajdował się w osobnym wierszu. Aby to zrobić, możemy po prostu poprzedzić poprzedni kod INSERT()
oświadczenie.
Przykład:
INSERT INTO Animals (AnimalName) SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
Powoduje to wstawienie każdej wartości do osobnego wiersza w AnimalName
kolumna Animals
tabela.
Sprawdź wyniki
Aby sprawdzić wyniki, uruchom SELECT
oświadczenie przy stole:
SELECT * FROM Animals;
Wynik:
AnimalId AnimalName -------- ---------- 1 Cat 2 Dog 3 Rabbit
Ten wynik zakłada, że AnimalId
kolumna to IDENTITY
kolumna (wartości zwiększające się są wstawiane automatycznie z każdym nowym wierszem).
Pełny skrypt
Oto skrypt, który pozwala wykonać powyższy przykład za jednym razem. Tworzy bazę danych, tworzy tabelę, wstawia dane, a następnie sprawdza wyniki.
Utwórz bazę danych:
/* Create database */ USE master; CREATE DATABASE Nature;
Zrób resztę:
/* 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;