Така че имате списък, разделен със запетая, и сега трябва да го вмъкнете в базата данни. Но работата е там, че трябва да вмъкнете всяка стойност от списъка в собствен ред на таблица. Така че по принцип трябва да разделите списъка на отделни стойности, след което да вмъкнете всяка една от тези стойности в нов ред.
T-SQL вече има STRING_SPLIT()
функция, която прави този тип операция лесна. Тази функция беше налична за първи път в SQL Server 2016 и е налична в бази данни с ниво на съвместимост от 130 или по-високо (как да проверите нивото на съвместимост на базата си данни и как да го промените).
Пример
Да кажем, че имаме следния списък, разделен със запетая:
Cat,Dog,Rabbit
Можем да използваме STRING_SPLIT()
функция за разделяне на всяка стойност в собствен ред. Като това:
SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
Резултат:
value ------ Cat Dog Rabbit
Така че вече сме на половината път. Всъщност, в зависимост от вашите изисквания, това може да е всичко, от което се нуждаете.
Вмъкнете стойностите в таблица
Можем да вземем горния код и да го използваме с INSERT()
изявление. С други думи, можем да вмъкнем тези стойности в таблица и всеки елемент от списъка ще се намира в собствен ред. За да направим това, можем просто да поставим префикс на предишния код с INSERT()
изявление.
Пример:
INSERT INTO Animals (AnimalName) SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');
Това вмъква всяка стойност в собствен ред в AnimalName
колона на Animals
таблица.
Проверете резултатите
За да проверите резултатите, стартирайте SELECT
изявление срещу таблицата:
SELECT * FROM Animals;
Резултат:
AnimalId AnimalName -------- ---------- 1 Cat 2 Dog 3 Rabbit
Този резултат предполага, че AnimalId
колоната е IDENTITY
колона (нарастващите стойности се вмъкват автоматично с всеки нов ред).
Пълният скрипт
Ето скрипт, който ви позволява да направите горния пример наведнъж. Той създава базата данни, създава таблицата, вмъква данните и след това проверява резултатите.
Създайте базата данни:
/* Create database */ USE master; CREATE DATABASE Nature;
Направете останалото:
/* 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;