Pregunta!!

20/08/2004 - 16:30 por Roberto Sandro | Informe spam
Hay alguna manera en sql de recorrer una tabla de la siguiente manera ?
For i=0 To CantidadDeRegistros
hacer algo aca con ese registro
Next

Preguntas similare

Leer las respuestas

#1 Javier Loria
20/08/2004 - 17:23 | Informe spam
Hola Roberto:
Si, si la hay. Se llaman CURSORES y puedes revisar la documentacion en
Linea de como hacerlos.
Mi recomendacion es que NO LOS USES, y que cambies de forma de pensar .
En SQL es muy eficiente trabajar con conjuntos de datos y hacer las
transformaciones directamente y no por medio de estos ciclos. Es frecuente
encontrar diferencias de 10/1000 veces mas lento un cursor que una sentencia
de SQL natural.
Es mi opinion que mas del 50% de los problemas de rendimientos de SQL se
deben a los cursores. Si nos cuentas un poco que quieres hacer con gusto te
ayudamos y te sirve de ejemplo para otros casos.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Roberto Sandro" wrote in message
news:OA8$
Mostrar la cita
#2 Roberto Sandro
20/08/2004 - 19:23 | Informe spam
Es lo siguiente

Tablas

tabla_facturas tabla_cobros
nro_factura nro_factura
monto monto
moneda moneda
cotizacion_factura cotizacion_cobro
estado fecha_acreditacion
... .
..
etc. etc.
-

Tegno una VISTA armada que me muestra lo siguiente
nro_factura monto_factura moneda_factura monto_cobro
moneda_cobro fecha_acreditacion
-

de esta vista filtro por fecha_acreditacion <= FECHA_ACTUAL
Una vez que ya tengo los registros que quiero comprovar, tengo que hacer lo
siguiente

Necesito saber en dolares, si tengo alguna diferencia entre lo que FACTURE y
COBRE

EN CODIGO VISUAL BASIC LO SOLUCIONE ASI
Ciclo que recorre los registros seleccionados
If moneda_factura = "U$S" Then
valorA = monto_factura
If moneda_cobro = "U$S" Then
valorB = monto_cobro
Else
valorB = monto_cobro / cotizacion_cobro
End If
Else
valorA = monto_factura / cotizacion_factura
End If
If valorA - valorB > 1 Then
UPDATE tabla_facturas SET estado=1 WHERE factura = nro_factura
Else
UPDATE tabla_facturas SET estado=2 WHERE factura = nro_factura
End If
Fin del ciclo

PERO EN SQL, HAY MANERA DE HACERLO ?

"Javier Loria" escribió en el mensaje
news:
Mostrar la cita
.
Mostrar la cita
sentencia
Mostrar la cita
se
Mostrar la cita
te
Mostrar la cita
#3 Javier Loria
20/08/2004 - 20:12 | Informe spam
Hola Roberto:
Excelente caso.
Prueba con esto:
SELECT Nro_Factura
, CASE
WHEN Moneda_Factura='US$'
AND Monto_Cobro='US$'
AND Monto_Factura-Monto_Cobro>1
THEN 1
WHEN Moneda_Factura<>'US$'
AND Monto_Cobro='US$'
AND (Monto_Factura/Cotizacion_Factura) - Monto_Cobro>1
THEN 1
WHEN Moneda_Factura='US$'
AND Monto_Cobro<>'US$'
AND Monto_Factura - (Monto_Cobro/Cotizacion_Cobro)>1
THEN 1
WHEN Moneda_Factura<>'US$'
AND Monto_Cobro<>'US$'
AND
(Monto_Factura/Cotizacion_Factura)-(Monto_Cobro/Cotizacion_Cobro)>1
THEN 1
ELSE 2
END AS NuevoEstado
FROM NombreeVista -- Reemplazar por el Nombre de la Vista
Esto lo puedes usar directamente en un UPDATE.
UPDATE tabla_facturas
SET estado=NuevoEstado
FROM Tabla_Facturas
JOIN (..) AS NuevoEstadoFacturas
ON Tabla_Factura.NroFactura=NuevoEstadoFacturas.NroFactura
= El "truco" esta en usar la funcion CASE que se parece un poco a la
funcion IIF de Visual Basic. Esta funcion es muy poderosa para "matar" la
necesidad de cursores, ya que reemplaza al IF.
Espero se entienda,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Roberto Sandro" wrote in message
news:#
Mostrar la cita
lo
Mostrar la cita
y
Mostrar la cita
en
Mostrar la cita
pensar
Mostrar la cita
frecuente
Mostrar la cita
?
Mostrar la cita
#4 Roberto Sandro
20/08/2004 - 21:03 | Informe spam
gracias lo provare
"Javier Loria" escribió en el mensaje
news:
Mostrar la cita
FACTURE
Mostrar la cita
documentacion
Mostrar la cita
SQL
Mostrar la cita
gusto
Mostrar la cita
manera
Mostrar la cita
Ads by Google
Search Busqueda sugerida