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;