Tablas Temporales Vs Cursores en sql2000

03/05/2005 - 17:18 por Developers | Informe spam
Amigos cual es la mejor forma de trabajar con datos temporales, usando
Tablas Temporales #mitabla o usar cursores temporales...

Tengo una consulta que obligadamente tengo que usar un Repositorio temporal
para completar dicha operacion.


Gracias x sus comentarios

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
03/05/2005 - 17:39 | Informe spam
Siempre es mas ventajoso evitar cursores los mas que se pueda, pues SQL
Server esta configurado o desarrollado para obtener mejor rendimineto en
operaciones de conjunto y no en operaciones fila a fila. En cuanto a usar una
tabla temporal o una variable tipo tabla, depende de cuantas filas insertaras
en este repositorio temporal y si necesitaras indices o no.


AMB

"Developers" wrote:

Amigos cual es la mejor forma de trabajar con datos temporales, usando
Tablas Temporales #mitabla o usar cursores temporales...

Tengo una consulta que obligadamente tengo que usar un Repositorio temporal
para completar dicha operacion.


Gracias x sus comentarios




Respuesta Responder a este mensaje
#2 Maxi
03/05/2005 - 18:02 | Informe spam
Hola, te paso un articulo del porque no se deberian usar cursores, vos saca
tus propias conclusiones ;)

http://www.configuracionesintegrale...p?articulo)5



Salu2
Maxi


"Developers" escribió en el mensaje
news:ewSWlN$
Amigos cual es la mejor forma de trabajar con datos temporales, usando
Tablas Temporales #mitabla o usar cursores temporales...

Tengo una consulta que obligadamente tengo que usar un Repositorio
temporal
para completar dicha operacion.


Gracias x sus comentarios



Respuesta Responder a este mensaje
#3 Developers
03/05/2005 - 18:02 | Informe spam
realmente el repositorio temporal tendra a lo mucho 10 filas. Te paso mi
sentencia para haber si estoy haciendo bien las cosas

SELECT I.CDG_ZON, I.COD_ITE, SUM(I.STK_INI) AS STOCK
INTO #TMPSTOCK
FROM D_INVE_ATG I
WHERE I.ANHO='2005' AND I.COD_ITE='20220034' AND ((I.CDG_ZON='02' AND
I.AREA<='12') OR (I.CDG_ZON<>'02'))
GROUP BY I.ANHO,I.CDG_ZON, I.COD_ITE
INSERT INTO #TMPSTOCK SELECT DMV.CDG_ZON, DMV.COD_ITE,
SUM(DMV.ING_ITE-DMV.SAL_ITE) AS STOCK
FROM D_MOVI_ATG DMV
WHERE DMV.ANHO='2005' AND DMV.COD_ITE='20220034' AND DMV.ANU<>'*' AND
DMV.FASN<>'N' AND LEFT(DMV.DOC_REF,2)<>'IK' AND LEFT(DMV.DOC_REF,2)<>'SK'
AND LEFT(DMV.DOC_REF,2)<>'SD' AND LEFT(DMV.DOC_REF,2)<>'AT' AND
LEFT(DMV.DOC_REF,2)<>'TA' AND ((DMV.CDG_ZON='02' AND DMV.AREA<='12') OR
(DMV.CDG_ZON<>'02'))
GROUP BY DMV.ANHO, DMV.CDG_ZON, DMV.COD_ITE

SELECT D.NUM_ITEM AS CODIGO, D.DES_TAB AS ZONA, TP.COD_ITE AS COD_PROD,
IT.DET_ITE AS PRODUCTO, IT.MEDIDA, SUM(STOCK) AS STOCK
FROM D_TABLA D
LEFT JOIN #TMPSTOCK TP ON TP.CDG_ZON=RIGHT(D.NUM_ITEM,2)
LEFT JOIN M_ITEM_ATG IT ON IT.COD_ITE=TP.COD_ITE
WHERE D.CDG_TAB='P02' AND D.NUM_ITEM<>'000'
GROUP BY D.NUM_ITEM, D.DES_TAB, TP.COD_ITE, IT.DET_ITE, IT.MEDIDA

DROP TABLE #TMPSTOCK


gracias x los comentarios



"Alejandro Mesa" escribió en el
mensaje news:
Siempre es mas ventajoso evitar cursores los mas que se pueda, pues SQL
Server esta configurado o desarrollado para obtener mejor rendimineto en
operaciones de conjunto y no en operaciones fila a fila. En cuanto a usar


una
tabla temporal o una variable tipo tabla, depende de cuantas filas


insertaras
en este repositorio temporal y si necesitaras indices o no.


AMB

"Developers" wrote:

> Amigos cual es la mejor forma de trabajar con datos temporales, usando
> Tablas Temporales #mitabla o usar cursores temporales...
>
> Tengo una consulta que obligadamente tengo que usar un Repositorio


temporal
> para completar dicha operacion.
>
>
> Gracias x sus comentarios
>
>
>
>
Respuesta Responder a este mensaje
#4 Alejandro Mesa
03/05/2005 - 18:27 | Informe spam
En este caso te recomendaria usar una variable tipo tabla. De esta forma
evitarias que tu procedimeinto se recompile cada vez que lo ejecutas.

declare @t table ()

insert into @t (...)
SELECT
I.CDG_ZON,
I.COD_ITE,
SUM(I.STK_INI) AS STOCK
FROM
D_INVE_ATG I
WHERE
I.ANHO='2005'
AND I.COD_ITE='20220034'
AND ((I.CDG_ZON='02' AND I.AREA<='12') OR (I.CDG_ZON<>'02'))
GROUP BY
I.ANHO,
I.CDG_ZON,
I.COD_ITE

insert into @t (...)
SELECT
DMV.CDG_ZON,
DMV.COD_ITE,
SUM(DMV.ING_ITE-DMV.SAL_ITE) AS STOCK
FROM
D_MOVI_ATG DMV
WHERE
DMV.ANHO='2005'
AND DMV.COD_ITE='20220034'
AND DMV.ANU <> '*'
AND
DMV.FASN <> 'N'
AND LEFT(DMV.DOC_REF,2) <> 'IK'
AND LEFT(DMV.DOC_REF,2) <> 'SK'
AND LEFT(DMV.DOC_REF,2) <> 'SD'
AND LEFT(DMV.DOC_REF,2) <> 'AT'
AND LEFT(DMV.DOC_REF,2) <> 'TA'
AND ((DMV.CDG_ZON='02' AND DMV.AREA<='12') OR (DMV.CDG_ZON<>'02'))
GROUP BY
DMV.ANHO,
DMV.CDG_ZON,
DMV.COD_ITE

SELECT
D.NUM_ITEM AS CODIGO,
D.DES_TAB AS ZONA,
TP.COD_ITE AS COD_PROD,
IT.DET_ITE AS
PRODUCTO,
IT.MEDIDA,
SUM(STOCK) AS STOCK
FROM
D_TABLA D
LEFT JOIN
@t TP
ON TP.CDG_ZON = RIGHT(D.NUM_ITEM,2)
LEFT JOIN
M_ITEM_ATG IT
ON IT.COD_ITE=TP.COD_ITE
WHERE
D.CDG_TAB='P02' AND D.NUM_ITEM <> '000'
GROUP BY
D.NUM_ITEM,
D.DES_TAB,
TP.COD_ITE,
IT.DET_ITE,
IT.MEDIDA
go

otra cosa, puedes cambiar:

...
AND LEFT(DMV.DOC_REF,2) <> 'IK'
AND LEFT(DMV.DOC_REF,2) <> 'SK'
AND LEFT(DMV.DOC_REF,2) <> 'SD'
AND LEFT(DMV.DOC_REF,2) <> 'AT'
AND LEFT(DMV.DOC_REF,2) <>'TA'
...

por :

...
AND LEFT(DMV.DOC_REF,2) not in ('IK', 'SK', 'SD', 'AT', 'TA')
...


AMB

"Developers" wrote:

realmente el repositorio temporal tendra a lo mucho 10 filas. Te paso mi
sentencia para haber si estoy haciendo bien las cosas

SELECT I.CDG_ZON, I.COD_ITE, SUM(I.STK_INI) AS STOCK
INTO #TMPSTOCK
FROM D_INVE_ATG I
WHERE I.ANHO='2005' AND I.COD_ITE='20220034' AND ((I.CDG_ZON='02' AND
I.AREA<='12') OR (I.CDG_ZON<>'02'))
GROUP BY I.ANHO,I.CDG_ZON, I.COD_ITE
INSERT INTO #TMPSTOCK SELECT DMV.CDG_ZON, DMV.COD_ITE,
SUM(DMV.ING_ITE-DMV.SAL_ITE) AS STOCK
FROM D_MOVI_ATG DMV
WHERE DMV.ANHO='2005' AND DMV.COD_ITE='20220034' AND DMV.ANU<>'*' AND
DMV.FASN<>'N' AND LEFT(DMV.DOC_REF,2)<>'IK' AND LEFT(DMV.DOC_REF,2)<>'SK'
AND LEFT(DMV.DOC_REF,2)<>'SD' AND LEFT(DMV.DOC_REF,2)<>'AT' AND
LEFT(DMV.DOC_REF,2)<>'TA' AND ((DMV.CDG_ZON='02' AND DMV.AREA<='12') OR
(DMV.CDG_ZON<>'02'))
GROUP BY DMV.ANHO, DMV.CDG_ZON, DMV.COD_ITE

SELECT D.NUM_ITEM AS CODIGO, D.DES_TAB AS ZONA, TP.COD_ITE AS COD_PROD,
IT.DET_ITE AS PRODUCTO, IT.MEDIDA, SUM(STOCK) AS STOCK
FROM D_TABLA D
LEFT JOIN #TMPSTOCK TP ON TP.CDG_ZON=RIGHT(D.NUM_ITEM,2)
LEFT JOIN M_ITEM_ATG IT ON IT.COD_ITE=TP.COD_ITE
WHERE D.CDG_TAB='P02' AND D.NUM_ITEM<>'000'
GROUP BY D.NUM_ITEM, D.DES_TAB, TP.COD_ITE, IT.DET_ITE, IT.MEDIDA

DROP TABLE #TMPSTOCK


gracias x los comentarios



"Alejandro Mesa" escribió en el
mensaje news:
> Siempre es mas ventajoso evitar cursores los mas que se pueda, pues SQL
> Server esta configurado o desarrollado para obtener mejor rendimineto en
> operaciones de conjunto y no en operaciones fila a fila. En cuanto a usar
una
> tabla temporal o una variable tipo tabla, depende de cuantas filas
insertaras
> en este repositorio temporal y si necesitaras indices o no.
>
>
> AMB
>
> "Developers" wrote:
>
> > Amigos cual es la mejor forma de trabajar con datos temporales, usando
> > Tablas Temporales #mitabla o usar cursores temporales...
> >
> > Tengo una consulta que obligadamente tengo que usar un Repositorio
temporal
> > para completar dicha operacion.
> >
> >
> > Gracias x sus comentarios
> >
> >
> >
> >



Respuesta Responder a este mensaje
#5 Alejandro Mesa
03/05/2005 - 19:12 | Informe spam
Muy bueno el articulo.


Saludos,

Alejandro Mesa

"Maxi" wrote:

Hola, te paso un articulo del porque no se deberian usar cursores, vos saca
tus propias conclusiones ;)

http://www.configuracionesintegrale...p?articulo)5



Salu2
Maxi


"Developers" escribió en el mensaje
news:ewSWlN$
> Amigos cual es la mejor forma de trabajar con datos temporales, usando
> Tablas Temporales #mitabla o usar cursores temporales...
>
> Tengo una consulta que obligadamente tengo que usar un Repositorio
> temporal
> para completar dicha operacion.
>
>
> Gracias x sus comentarios
>
>
>



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida