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

Se duplica resultado en procedimiento sql server con cursor

Estas en el tema de Se duplica resultado en procedimiento sql server con cursor en el foro de SQL Server en Foros del Web. Hola chicos!!! antes que nada, gracias por leer mi problema... Estoy elaborando un procedimiento almacenado la parte que me falla es el siguiente: Código: --Se ...
  #1 (permalink)  
Antiguo 19/07/2011, 16:28
 
Fecha de Ingreso: julio-2011
Ubicación: Bogota, Colombia
Mensajes: 1
Antigüedad: 12 años, 9 meses
Puntos: 0
Se duplica resultado en procedimiento sql server con cursor

Hola chicos!!! antes que nada, gracias por leer mi problema...

Estoy elaborando un procedimiento almacenado la parte que me falla es el siguiente:

Código:
--Se crea el cursor que recorre los detalles e inserta en la tabla de facturas_afiliados
	declare	cur_facturacion cursor for
	select	f.codigo_suscriptor,
			f.codigo_sucursal,
			f.num_factura,
			convert(varchar(10),f.fecha_actualizacion,120) as fecha_actualizacion,
			--Este pedazo decide si es cuota unica o cuota fija
			case
				--Si es cuota unica
				when	(select	isnull(cuota_unica,0)
						 from	ea_carpeta c
						 where	c.codigo_suscriptor = f.codigo_suscriptor
						) <> 0			
				--Entonces Se coloca cuota unica
				then	(select	isnull(cuota_unica,0)
												 from	ea_carpeta c
												 where	c.codigo_suscriptor = f.codigo_suscriptor)
				--Si es cuota fija o sea consumo minimo y es mayor a lo consumido
				when	(select	isnull(cuota_minima,0)
						 from	acr_suscriptores c
						 where	c.codigo_suscriptor = f.codigo_suscriptor
						) > sum(f.valor) 

				--Entonces se coloca la cuota minima obligatoria
				then	(select	isnull(cuota_minima,0)
												 from	acr_suscriptores c
												 where	c.codigo_suscriptor = f.codigo_suscriptor)

				--De lo contrario, simplemente se coloca lo consumido
				else	sum(f.valor)
			end as valor_factura,
			f.usuario_actualizacion
	from	ea_detalles_facturas f
	where	f.fecha_actualizacion = @fecha_factura 
	group by f.codigo_suscriptor, f.codigo_sucursal, f.num_factura, f.fecha_actualizacion, f.usuario_actualizacion

	open	cur_facturacion
	fetch	cur_facturacion
	into	@codigo_suscriptor,
			@codigo_sucursal,
			@num_factura,
			@fecha_factura,
			@valor_factura,
			@usuario_factura

	--Empieza el loop del cursor
	while	@@fetch_status = 0
	begin
		insert	into ea_facturas_afiliados
				(codigo_suscriptor, codigo_sucursal, num_factura, fecha_factura, valor_factura,
				 codigo_estado, observacion_factura, concepto_factura,
				 usuario_factura)
		values	(@codigo_suscriptor, @codigo_sucursal, @num_factura, @fecha_factura, @valor_factura,
				 '1', 'FACTURACION DEL '+@fecha_inicio+' AL '+@fecha_final,	'FACTURA DEL '+@fecha_inicio+' AL '+@fecha_final,
				 @usuario_factura)

		fetch	cur_facturacion
		into	@codigo_suscriptor,
				@codigo_sucursal,
				@num_factura,
				@fecha_factura,
				@valor_factura,
				@usuario_factura
	end
Muestro el código con el fin de que haya una idea, no se puede entender fácilmente sin conocer la magnitud de esa Base de datos, el punto es que esa parte me genera esto:



Si ven la fila que tengo seleccionada en la columna valor_factura registra 800.000

Pero, si yo ejecuto solo el select que contiene el código anterior sin poner a correr el cursor e insertar en la tabla, sale esto:



y ahí en la columna valor_factura es 400.000 y así es como debe ser...

Cuando se hace la inserción con el cursor es cuando se duplica el valor, pero no veo por donde, no tiene lógica, si alguien entiende y puede ayudarme se lo agradecería...
  #2 (permalink)  
Antiguo 20/07/2011, 06:02
Avatar de AnibalDiaz  
Fecha de Ingreso: junio-2011
Mensajes: 65
Antigüedad: 12 años, 10 meses
Puntos: 5
Respuesta: Se duplica resultado en procedimiento sql server con cursor

Evita los cursores...

En tu caso puedes hacer un INSERT SELECT

Saludos!.

Etiquetas: cursor, procedimiento, server, sql
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 08:24.