tablas temporales

19/05/2004 - 19:29 por news.microsoft.com | Informe spam
Hola, tengo un SP que genera una tabla temporal, la cual se ejecuta bien en
SQL QUERY ANALIZER, pero al tratar de ejecutarla a traves a ASP me indica
que la tabla resultado esta cerrada,

La idea es crear una tabla resumen de tres tablas

Alguna sugerencia

Codigo SP
CREATE PROCEDURE pa_control_ppto2
@per as varchar(5),
@ses as varchar(5)
AS

select numproyecto,lineaInversion,nombre,Montoinicial,0 as comite,0 as
subcomite,arrastre,0 as saldo,0 as sesionActual,0 as saldoTotal
into #paso from t_lineasdeInversiones where left(lineaInversion,4)=@per
update #paso set comite=A.total from (select lineaInversion,sum(monto)as
total from t_aprobado_comite group by lineaInversion) A
where a.lineaInversion=#paso.lineaInversion

update #paso set subcomite=A.subcomite from (SELECT linea, SUM(inversion) AS
subcomite FROM dbo.Cerrar_agenda
WHERE (estado = 'Aprobada')GROUP BY linea) A
where a.linea=#paso.lineaInversion

update #paso set sesionActual=A.actual from (SELECT
cabecera_ficha.lineaInversion,SUM(dbo.agenda.costos) AS actual FROM
dbo.agenda INNER JOIN
dbo.cabecera_ficha ON dbo.agenda.ficha dbo.cabecera_ficha.idFicha
WHERE (dbo.agenda.agendado = 1 and periodo=@per and sesion=@ses)
GROUP BY dbo.cabecera_ficha.lineaInversion) A
where #paso.lineaInversion=A.lineaInversion

update #paso set
saldo=comite-subcomite-arrastre,saldoTotal=comite-subcomite-arrastre-sesionA
ctual

select * from #paso


GO

Preguntas similare

Leer las respuestas

#6 Maximiliano Damian Accotto
20/05/2004 - 01:25 | Informe spam
Hola, el unico problema es rendimiento!! si las podes evitar mejor, pero hay
veces que no podes :(

Suerte


Salu2

Maximiliano Damian Accotto
Gerente de IT
Fundicion San Cayetano S.A.
Buenos Aires Argentina
-
maxi_accotto[arroba]speedy[.]com[.].ar
MSN:



"jtorrej" escribió en el mensaje
news:
Gracias, por las respuestas
:-)

Tiene algun inconveniente trabajar con tablas temporales ?

"news.microsoft.com" escribió en el mensaje
news:OM%
> Hola, tengo un SP que genera una tabla temporal, la cual se ejecuta bien
en
> SQL QUERY ANALIZER, pero al tratar de ejecutarla a traves a ASP me


indica
> que la tabla resultado esta cerrada,
>
> La idea es crear una tabla resumen de tres tablas
>
> Alguna sugerencia
>
> Codigo SP
> CREATE PROCEDURE pa_control_ppto2
> @per as varchar(5),
> @ses as varchar(5)
> AS
>
> select numproyecto,lineaInversion,nombre,Montoinicial,0 as comite,0 as
> subcomite,arrastre,0 as saldo,0 as sesionActual,0 as saldoTotal
> into #paso from t_lineasdeInversiones where left(lineaInversion,4)=@per
> update #paso set comite=A.total from (select lineaInversion,sum(monto)as
> total from t_aprobado_comite group by lineaInversion) A
> where a.lineaInversion=#paso.lineaInversion
>
> update #paso set subcomite=A.subcomite from (SELECT linea,


SUM(inversion)
AS
> subcomite FROM dbo.Cerrar_agenda
> WHERE (estado = 'Aprobada')GROUP BY linea) A
> where a.linea=#paso.lineaInversion
>
> update #paso set sesionActual=A.actual from (SELECT
> cabecera_ficha.lineaInversion,SUM(dbo.agenda.costos) AS actual FROM
> dbo.agenda INNER JOIN
> dbo.cabecera_ficha ON dbo.agenda.ficha > > dbo.cabecera_ficha.idFicha
> WHERE (dbo.agenda.agendado = 1 and periodo=@per and sesion=@ses)
> GROUP BY dbo.cabecera_ficha.lineaInversion) A
> where #paso.lineaInversion=A.lineaInversion
>
> update #paso set
>



saldo=comite-subcomite-arrastre,saldoTotal=comite-subcomite-arrastre-sesionA
> ctual
>
> select * from #paso
>
>
> GO
>
>


Respuesta Responder a este mensaje
#7 Javier Loria
20/05/2004 - 02:08 | Informe spam
Hola:
Hay algunos casos en que las Tablas Temporales ayudan al desepeno y son
un instrumento valioso. En este caso no :(
En el ejemplo no encontre ninguna razon para obligar al servidor de SQL
a grabar localmente los datos, para luego actualizarlos y luego enviarlos a
la estacion. Prueba el desempeno de ambos procedimientos y cuentanos como
anda el rendimiento. Si la hay mas de 5000 filas apostaria a que es por lo
menos 2 o 3 veces mas rapido.
Adicionalmente es posible tener problemas de consistencia, que pasaria
si por ejemplo se actualizan los datos por parte de otra estacion mientras
se esta corriendo este procedimiento, tendrias una consulta inconsistente :(
En general excepto en casos muy especificos (reutilizacion de consultas
principalmente) es mucho mejor no usar tablas temporales.
En mi opionon, es mal sintoma recurrir a ellas ya que con frecuencia
algunos programadores las usan como "arreglos" no permitiendoles pensar en
conjuntos de datos. Pero hay muchos casos donde si es valido su uso.
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.
jtorrej escribio:
Gracias, por las respuestas
:-)

Tiene algun inconveniente trabajar con tablas temporales ?

"news.microsoft.com" escribió en el mensaje
news:OM%
Hola, tengo un SP que genera una tabla temporal, la cual se ejecuta
bien en SQL QUERY ANALIZER, pero al tratar de ejecutarla a traves a
ASP me indica que la tabla resultado esta cerrada,

La idea es crear una tabla resumen de tres tablas

Alguna sugerencia

Codigo SP
CREATE PROCEDURE pa_control_ppto2
@per as varchar(5),
@ses as varchar(5)
AS

select numproyecto,lineaInversion,nombre,Montoinicial,0 as comite,0
as subcomite,arrastre,0 as saldo,0 as sesionActual,0 as saldoTotal
into #paso from t_lineasdeInversiones where
left(lineaInversion,4)=@per update #paso set comite=A.total from
(select lineaInversion,sum(monto)as total from t_aprobado_comite
group by lineaInversion) A
where a.lineaInversion=#paso.lineaInversion

update #paso set subcomite=A.subcomite from (SELECT linea,
SUM(inversion) AS subcomite FROM dbo.Cerrar_agenda
WHERE (estado = 'Aprobada')GROUP BY linea) A
where a.linea=#paso.lineaInversion

update #paso set sesionActual=A.actual from (SELECT
cabecera_ficha.lineaInversion,SUM(dbo.agenda.costos) AS actual FROM
dbo.agenda INNER JOIN
dbo.cabecera_ficha ON dbo.agenda.ficha >> dbo.cabecera_ficha.idFicha
WHERE (dbo.agenda.agendado = 1 and periodo=@per and sesion=@ses)
GROUP BY dbo.cabecera_ficha.lineaInversion) A
where #paso.lineaInversion=A.lineaInversion

update #paso set






saldo=comite-subcomite-arrastre,saldoTotal=comite-subcomite-arrastre-sesionA
ctual

select * from #paso


GO
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida