una texto string_split separar separado por dividir delimitada consulta comas columnas caracter cadena buscar sql sql-server-2005 tsql insert

texto - split sql



INSERTAR EN LA TABLA de la lista varchar separada por comas (3)

Tal vez no esté viendo la madera de los árboles pero estoy atascado, así que aquí está la pregunta:

¿Cómo puedo importar / insertar una lista de valores varchar separados por comas en una tabla? No quiero decir algo como esto:

  • ''12345678,87654321,11223344'' pero esto:
  • ''12345678'',''87654321'',''11223344''

Tengo una función de Split pero parece ser inútil en este caso, ¿no es así?

Aquí hay un ejemplo simple (simulacro de SQL) para mostrar lo que quiero decir:

Create Table #IMEIS( imei varchar(15) ) INTO INTO #IMEIS(imei) SELECT * FROM (''012251000362843'', ''012251001084784'', ''012251001168744'', ''012273007269862'', ''012291000080227'', ''012291000383084'', ''012291000448515'') SELECT * from #IMEIS DROP TABLE #IMEIS;

Gracias de antemano.


Algo como esto debería funcionar:

INSERT INTO #IMEIS (imei) VALUES (''val1''), (''val2''), ...

ACTUALIZAR:

Al parecer, esta sintaxis solo está disponible a partir de SQL Server 2008.


Como no hay forma de pasar esta "lista de varchars separados por comas", asumo que algún otro sistema los está generando. Si puede modificar su generador ligeramente, debería ser viable. En lugar de separar por comas, se separa por selección de union all select y se debe anteponer una select también a la lista. Finalmente, debe proporcionar alias para la tabla y columna en su subselección:

Create Table #IMEIS( imei varchar(15) ) INSERT INTO #IMEIS(imei) SELECT * FROM (select ''012251000362843'' union all select ''012251001084784'' union all select ''012251001168744'' union all select ''012273007269862'' union all select ''012291000080227'' union all select ''012291000383084'' union all select ''012291000448515'') t(Col) SELECT * from #IMEIS DROP TABLE #IMEIS;

Pero anotando tu comentario en otra respuesta, sobre tener 5000 entradas para agregar. Creo que las 256 tablas por limitación de selección pueden comenzar con el patrón anterior "unir todos", por lo que aún tendrá que dividir algunos de estos valores en declaraciones separadas.


Sql Server no tiene (que yo sepa) tener la función de división en la compilación. La función de división en general en todas las plataformas tendría un valor de cadena separado por comas que se dividirá en cadenas individuales. En el servidor SQL, el objetivo principal o necesario de la función Dividir es convertir un valor de cadena separado por comas (''abc, cde, fgh'') en una tabla temporal con cada cadena como filas.

La siguiente función de división es una función con valores de tabla que nos ayudaría a dividir una cadena separada por comas (o cualquier otro valor delimitador) en una cadena individual.

CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1)) returns @temptable TABLE (items varchar(8000)) as begin declare @idx int declare @slice varchar(8000) select @idx = 1 if len(@String)<1 or @String is null return while @idx!= 0 begin set @idx = charindex(@Delimiter,@String) if @idx!=0 set @slice = left(@String,@idx - 1) else set @slice = @String if(len(@slice)>0) insert into @temptable(Items) values(@slice) set @String = right(@String,len(@String) - @idx) if len(@String) = 0 break end return end

seleccione top 10 * de dbo.split (''Chennai, Bangalore, Mumbai'', '','')

el completo se puede encontrar en el siguiente enlace http://www.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx