Pregunta de Cursores

10/05/2004 - 17:33 por Jorge Eldis | Informe spam
Saludos a todos,

Necesito recorrer una tabla y por cada registro pasarle el parametro a un SP
para que realice un proceso determinado.

La pregunta es:

Como puedo recorrer una tabla sin usar Cursores ya que he leido y me han
explicado aqui en este Grupo que son muy lentos y con bajo desempeño?

Saludos Jorge Eldis

Preguntas similare

Leer las respuestas

#6 Jorge Eldis
12/05/2004 - 16:24 | Informe spam
Hola Ulises como estas, ayer te envie el un backup de la tabla en SQL2000
para que solo la subas a tu server, si me puedes orientar te lo agradezco,
yo sigo investigando para ver como hacerlo.

Como te comentaba con los Cursores si funciona pero lo noto lento.

Saludos Jorge Eldis

"ulises" wrote in message
news:b87701c4378f$a14dfbb0$
Lo que no tengo muy claro es si la clave de busqueda de
los destinos es de un tamaño fijo o variable, en todo caso
enviame la estructura de tus tablas y algunos datos de
ejemplo para poder ayudarte mejor.

Saludos,
Ulises

Mostrar la cita
lo que hay otros
Mostrar la cita
de destino seria
Mostrar la cita
todos los que
Mostrar la cita
realidad no se cual es
Mostrar la cita
numeros tengo que
Mostrar la cita
manera :
Mostrar la cita
#7 Javier Loria
12/05/2004 - 19:47 | Informe spam
Hola Jorge:
Asumiendo un esquema simplificado de las Tablas como:
==CREATE TABLE Tarifas(
DestinoParcial VARCHAR(15)
NOT NULL PRIMARY KEY
, NombreTarifa VARCHAR(25)
NOT NULL UNIQUE
, TarifaxMinuto DECIMAL(9,2)
NOT NULL
)

CREATE TABLE Llamadas(
LlamadaId INT
NOT NULL PRIMARY KEY
, TelefonoDestino VARCHAR(15)
NOT NULL
, DuracionMinutos INT
NOT NULL
)
INSERT Tarifas(DestinoParcial, NombreTarifa, TarifaxMinuto)
SELECT '001' , 'USA' , 1.00 UNION ALL
SELECT '00506' , 'Costa Rica' , 1.25 UNION ALL
SELECT '001305', 'Miami, USA' , 0.80

INSERT Llamadas(LlamadaId, TelefonoDestino, DuracionMinutos)
SELECT 1, '0011234567890', 1 UNION ALL
SELECT 2, '0011234567891', 2 UNION ALL
SELECT 3, '0013054567890', 1 UNION ALL
SELECT 4, '0013054567891', 2 UNION ALL
SELECT 5, '0050622222222', 2 UNION ALL
SELECT 6, '0050622222222', 2
== El problema principal reside en que al hacer el JOIN de Llamadas y
Tarifas, habria 2 tarifas posibles que se pueden aplicar a las llamadas 3 y
4. Se les puede aplicar la tarifa de USA y se les puede aplicar la Tarifa de
Miami. Si asumimos que se debe aplicar la Tarifa mas especifica (o sea la de
mayor largo), en este caso Miami, podriamos crear una vista como sigue:
==CREATE VIEW AsignacionTarifaLlamada
AS
SELECT LlamadaId, MAX(DestinoParcial) AS DestinoParcial
FROM Llamadas
JOIN Tarifas
ON Llamadas.TelefonoDestino LIKE Tarifas.DestinoParcial+'%'
GROUP BY LlamadaID
== En este caso usamos como criterio el MAX del DestinoParcial que nos
brinda de todos los posibles destinos parciales el mas largo. Entonces la
consulta para asignar costos a las Tarifas es:
==SELECT Llamadas.LlamadaID
, Llamadas.TelefonoDestino
, Llamadas.DuracionMinutos
, Tarifas.NombreTarifa
, Tarifas.TarifaxMinuto
, Llamadas.DuracionMinutos*Tarifas.TarifaxMinuto
FROM Llamadas
JOIN AsignacionTarifaLlamada
ON Llamadas.LlamadaID=AsignacionTarifaLlamada.LlamadaID
JOIN Tarifas
ON AsignacionTarifaLlamada.DestinoParcial=Tarifas.DestinoParcial
== Esta consulta debe ser entre 10 y 1000 veces mas rapida que el cursor,
asumiendo que la tabla de llamadas tiene miles de filas. Adicionalmente si
la tabla de Llamadas no tiene muchos UPDATES podrias pensar en
"materializar" la vista creando un indice, lo cual haria las consultas mucho
mas rapidas.

Espero te sirva,

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.
Jorge Eldis escribio:
Mostrar la cita
#8 Jorge Eldis
14/05/2004 - 17:34 | Informe spam
Hola amigos como estan,

Ante todo muchas gracias por el tiempo y la dedicacion que han tendo al
ayudarme.

Al final no use un Cursor mejore la estructura de datos y me guie por sus
consejos.

Muchas gracias nuevamente y saludos.

"Javier Loria" wrote in message
news:
Mostrar la cita
y
Mostrar la cita
de
Mostrar la cita
de
Mostrar la cita
mucho
Mostrar la cita
Ads by Google
Search Busqueda sugerida