Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

array en cursor

Estas en el tema de array en cursor en el foro de SQL Server en Foros del Web. estimados: Estoy en medio de un cursor, en el cual necesito realizar lo siguiente: vaya recorriendo uno por uno los registros de una tabla, y ...
  #1 (permalink)  
Antiguo 23/08/2007, 10:42
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 19 años, 11 meses
Puntos: 2
array en cursor

estimados:


Estoy en medio de un cursor, en el cual necesito realizar lo siguiente:

vaya recorriendo uno por uno los registros de una tabla, y en un campo X que tiene como dato nombres separados con coma (,) los vaya poniendo uno por uno en una tabla personas (siempre y cuando no esté ese nombre ya ingresado).


ej:

tabla original:
jose,pepe,roberto

tabla resultado:
1-jose
2-pepe
3-roberto

Muchas gracias

Última edición por moron; 23/08/2007 a las 11:10
  #2 (permalink)  
Antiguo 24/08/2007, 10:58
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: array en cursor

No existe una función hecha que logre lo que buscas, pero te paso uno de mis códigos. Lo obtuve de sqlservercentral.com y después lo ajusté a mis necesidades (por aquello del reconocimiento a quien verdaderamente lo hizo).

En este caso el separador es la '@', reemplazala por la ',' que es tu caso y prueba el resultado.

Código:
CREATE FUNCTION dbo.fnStringListToTable (@stringlist ntext)
RETURNS @tbl TABLE (
	row_no		int IDENTITY(1, 1) NOT NULL,
	number_int	int NOT NULL,
	number_decimal	decimal(15,5),
	string		nvarchar(100) NOT NULL
) AS

/*
fnStringListToTable		Rodrigo Guerra		2005-04-26

Regresa una tabla en memoria a partir de la cadena separada por
espacios que se pasa como parametro.
*/

BEGIN
	DECLARE @pos	int,
		@textpos	int,
		@chunklen	smallint,
		@int_val 	int,
		@dec_val	decimal(15,5),
		@str_val	nvarchar(4000),
		@tmpstr		nvarchar(4000),
		@leftover	nvarchar(4000)
	
	SET @textpos = 1
	SET @leftover = ''
	
	WHILE @textpos <= datalength(@stringlist) / 2
	BEGIN
		SET @chunklen = 4000 - datalength(@leftover) / 2
		SET @tmpstr = ltrim(@leftover + substring(@stringlist, @textpos, @chunklen))
		SET @textpos = @textpos + @chunklen
	
		SET @pos = charindex('@', @tmpstr)		--"@" es el separador de cadena
		WHILE @pos > 0
		BEGIN
			SET @str_val = substring(@tmpstr, 1, @pos - 1)
			SET @int_val = CASE WHEN dbo.fnIsNumeric(@str_val) = 1 THEN CONVERT(int, CONVERT(float, @str_val)) ELSE 0 END
			SET @dec_val = CASE WHEN dbo.fnIsNumeric(@str_val) = 1 THEN CONVERT(decimal(15,5), @str_val) ELSE 0 END
			INSERT @tbl (number_int, number_decimal, string) VALUES(@int_val, @dec_val, @str_val)
			SET @tmpstr = ltrim(substring(@tmpstr, @pos + 1, len(@tmpstr)))
			SET @pos = charindex('@', @tmpstr)
		END
	
		SET @leftover = @tmpstr
	END
	
	IF ltrim(rtrim(@leftover)) <> ''
		INSERT @tbl (number_int, number_decimal) VALUES(convert(int, @leftover), convert(decimal(15,5), @leftover))
	
	RETURN

END
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 19/12/2007, 06:41
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 19 años, 11 meses
Puntos: 2
Re: array en cursor

Gracias, nunca habia recibido el mail de que habia sido contestado este post, ahora buscando lo mismo di con el.
voy a analizar el código y luego te cuento.
saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:57.