sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo convertir una lista separada por comas en filas en SQL Server

Así que tiene una lista separada por comas y ahora necesita insertarla en la base de datos. Pero la cuestión es que debe insertar cada valor de la lista en su propia fila de la tabla. Básicamente, debe dividir la lista en sus valores separados, luego insertar cada uno de esos valores en una nueva fila.

T-SQL ahora tiene un STRING_SPLIT() función que hace que este tipo de operación sea muy fácil. Esta función estuvo disponible por primera vez en SQL Server 2016 y está disponible en bases de datos con un nivel de compatibilidad de 130 o superior (cómo verificar el nivel de compatibilidad de su base de datos y cómo cambiarlo).

Ejemplo

Digamos que tenemos la siguiente lista delimitada por comas:

Cat,Dog,Rabbit

Podemos usar el STRING_SPLIT() para separar cada valor en su propia fila. Así:

SELECT value 
FROM STRING_SPLIT('Cat,Dog,Rabbit', ',');

Resultado:

value 
------
Cat   
Dog   
Rabbit

Así que ya estamos a mitad de camino. De hecho, dependiendo de sus requisitos, esto podría ser todo lo que necesita.

Insertar los valores en una tabla

Podemos tomar el código anterior y usarlo con un INSERT() declaración. En otras palabras, podemos insertar esos valores en una tabla y cada elemento de la lista residirá en su propia fila. Para hacer esto, simplemente podemos prefijar el código anterior con un INSERT() declaración.

Ejemplo:

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

Esto inserta cada valor en su propia fila en el AnimalName columna de los Animals mesa.

Comprueba los resultados

Para comprobar los resultados, ejecute SELECT declaración contra la mesa:

SELECT * 
FROM Animals;

Resultado:

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

Este resultado asume que el AnimalId la columna es una IDENTITY columna (los valores incrementales se insertan automáticamente con cada nueva fila).

El guión completo

Aquí hay un script que le permite hacer el ejemplo anterior de una sola vez. Crea la base de datos, crea la tabla, inserta los datos y luego verifica los resultados.

Crear la base de datos:

/* Create database */
USE master;
CREATE DATABASE Nature;

Haz el 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;