Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como converter uma lista separada por vírgulas em linhas no SQL Server


Portanto, você tem uma lista separada por vírgulas e agora precisa inseri-la no banco de dados. Mas o problema é que você precisa inserir cada valor na lista em sua própria linha da tabela. Então, basicamente, você precisa dividir a lista em seus valores separados e inserir cada um desses valores em uma nova linha.

T-SQL agora tem um STRING_SPLIT() função que facilita esse tipo de operação. Essa função foi disponibilizada pela primeira vez no SQL Server 2016 e está disponível em bancos de dados com nível de compatibilidade de 130 ou superior (como verificar o nível de compatibilidade do banco de dados e como alterá-lo).


Exemplo


Digamos que temos a seguinte lista delimitada por vírgulas:
Cat,Dog,Rabbit

Podemos usar o STRING_SPLIT() função para separar cada valor em sua própria linha. Assim:
SELECT value 
FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');

Resultado:
value 
------
Cat   
Dog   
Rabbit

Então já estamos na metade. Na verdade, dependendo de suas necessidades, isso pode ser tudo o que você precisa.

Inserir os valores em uma tabela


Podemos pegar o código acima e usá-lo com um INSERT() demonstração. Em outras palavras, podemos inserir esses valores em uma tabela e cada item da lista residirá em sua própria linha. Para fazer isso, podemos simplesmente prefixar o código anterior com um INSERT() demonstração.

Exemplo:
INSERT INTO Animals (AnimalName)
SELECT value FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');

Isso insere cada valor em sua própria linha no AnimalName coluna da coluna Animals tabela.

Verifique os resultados


Para verificar os resultados, execute um SELECT declaração contra a tabela:
SELECT * 
FROM Animals;

Resultado:
AnimalId  AnimalName
--------  ----------
1         Cat       
2         Dog       
3         Rabbit    

Este resultado assume que o AnimalId coluna é uma IDENTITY coluna (os valores incrementais são inseridos automaticamente a cada nova linha).

O roteiro completo


Aqui está um script que permite que você faça o exemplo acima de uma só vez. Ele cria o banco de dados, cria a tabela, insere os dados e verifica os resultados.

Crie o banco de dados:
/* Create database */
USE master;
CREATE DATABASE Nature;

Faça o resto:
/* 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;