Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да конвертирате разделен със запетая списък в редове в SQL Server

Така че имате списък, разделен със запетая, и сега трябва да го вмъкнете в базата данни. Но работата е там, че трябва да вмъкнете всяка стойност от списъка в собствен ред на таблица. Така че по принцип трябва да разделите списъка на отделни стойности, след което да вмъкнете всяка една от тези стойности в нов ред.

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;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Премахване на идентичност от колона в таблица

  2. SQL Server:трябва ли да използвам таблици information_schema над sys таблици?

  3. Използвайте SCOPE_IDENTITY(), за да върнете последно въведената стойност на самоличността в същия обхват (SQL сървър)

  4. Как да намеря работещ порт на SQL Server?

  5. Форматирайте SQL в SQL Server Management Studio