Update

11/09/2009 - 15:46 por Nicolás | Informe spam
Hola, estoy haciendo unas pruebas con sql 2008, actualmente trabajo con 2000.
El problema surge cuando quiero hacer lo siguiente
update tabla set campo=(select sum(monto) from detalle where
tabla.id=campo.id)
where tabla.id between @inicio and @fin

el update se queda...
esto esta en un loop, donde voy actualizando @inicio y @fin
si reemplazo @inicio y @fin por los valores
lo hace al toque.
Saludos

Preguntas similare

Leer las respuestas

#1 Ruben Garrigos
11/09/2009 - 16:12 | Informe spam
Hola Nicolás,

¿Podrías incluir los scripts de creación de tus tablas junto a datos con
los que poder reproducir el problema? Con la información que das es muy difícil
poderte echar una mano. Podría ser casi cualquier cosa, desde un problema
con las estadisticas, parameter sniffing, algo raro en el bucle que comentas,
etc.

Un saludo,

Rubén Garrigós
Solid Quality Mentors

Blog: http://blogs.solidq.com/es/elrincondeldba

Hola, estoy haciendo unas pruebas con sql 2008, actualmente trabajo
con 2000.
El problema surge cuando quiero hacer lo siguiente
update tabla set campo=(select sum(monto) from detalle where
tabla.id=campo.id)
where tabla.id between @inicio and @fin
el update se queda...
esto esta en un loop, donde voy actualizando @inicio y @fin
si reemplazo @inicio y @fin por los valores
lo hace al toque.
Saludos
Respuesta Responder a este mensaje
#2 Abraham Forchue
12/09/2009 - 02:14 | Informe spam
Con el Script completo talvez pueda darte una mano estas usando un for? o
while?
de donde y como alimentas la variable que le indica el final del siclo?
Respuesta Responder a este mensaje
#3 Nicolás
14/09/2009 - 17:13 | Informe spam
Abraham, hago un while, pero me parece que el problema viene por el plan de
ejecucion. Ya que si reemplazo las variables @inicio y @fin por valores en el
analizer lo ejecuta rapidamente. El tema pasa por las variables, los tipos de
datos son identicos. Un tema es que la tabla detalle tiene 300.000.000
registros un promedio de 10 registros por cada registro en la tabla madre.

"Abraham Forchue" wrote:

Con el Script completo talvez pueda darte una mano estas usando un for? o
while?
de donde y como alimentas la variable que le indica el final del siclo?
Respuesta Responder a este mensaje
#4 Carlos Sacristan
14/09/2009 - 17:22 | Informe spam
Es el problema que te comentaba Rubén en su respuesta. Mete ese código
dentro de un procedimiento y llámalo en cada pasada del bucle, algo como:

CREATE PROCEDURE tu_sp @inicio INT, @fin INT
AS
update tabla set campo=(select sum(monto) from detalle where
tabla.id=campo.id)
where tabla.id between @inicio and @fin

GO

WHILE <condición>
BEGIN
EXEC tu_sp @inicio, @fin
END

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático

http://blogs.solidq.com/es/elrincondeldba


"Nicolás" wrote in message
news:
Abraham, hago un while, pero me parece que el problema viene por el plan
de
ejecucion. Ya que si reemplazo las variables @inicio y @fin por valores en
el
analizer lo ejecuta rapidamente. El tema pasa por las variables, los tipos
de
datos son identicos. Un tema es que la tabla detalle tiene 300.000.000
registros un promedio de 10 registros por cada registro en la tabla madre.

"Abraham Forchue" wrote:

Con el Script completo talvez pueda darte una mano estas usando un
for? o
while?
de donde y como alimentas la variable que le indica el final del siclo?
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida