viernes, 21 de septiembre de 2012

UPDATE con INNER JOIN (SELECT)

Bueno antiguamente recurría, a usar un cursor para actualizar campos de una tabla, bueno por lógica 

Paso1: cargaba los datos de una tabla en un cursor
paso2: empezaba a recorrer el cursor
paso3: cada recorrido de un registro actualizaba datos de otra tabla, (obviamente en los datos que tenian en igualdad)

ERRRORRRR, indudablemente funciona, o si FUNCIONAAA, pero, viene el pero, sucede que si lo mando a realizar este proceso sobre una tabla de 20,000 demorar unos cuantos segundos, si lo mando a 500,000 ya se demora unos minutos y si sobre pasa de millon, imagínense que demora, por lo tanto los cursores no los vuelvo a tocar.

Solución no favorable (usando cursor)
DECLARE @XCODIGO CHAR(10), @XSERIE CHAR(4)
declare MIPAPELETA CURSOR FOR SELECT cCodigo,cserie FROM TU_PAPELETA
OPEN MIPAPELETA
FETCH NEXT FROM MIPAPELETA INTO @XCODIGO,@XSERIE
WHILE @@FETCH_STATUS=0
BEGIN
UPDATE TU_CTA_CORRIENTE SET ccodigo=@XCODIGO   WHERE SERIE=@XSERIE
FETCH NEXT FROM MIPAPELETA INTO @XCODIGO,@XSERIE
END
CLOSE MIPAPELETA
DEALLOCATE MIPAPELETA
GO



SQL SERVER 2008
Solución optima (sin cursor)

UPDATE TU_INSPECTORES 
SET TU_INSPECTORES.cCodigoPersona = TG_PERSONA.cCodigoPersona
FROM TU_INSPECTORES INNER JOIN TG_PERSONA 
ON TU_INSPECTORES.cdniinspector = TG_PERSONA.cNumeroTD
WHERE tg_persona.cCodigoTD='02'


Muy aparte que uff no ahorramos lineas de codigo.

UPDATE
    Table
SET
    Table.col1 = other_table.col1,
    Table.col2 = other_table.col2FROM
    Table
INNER JOIN
    other_tableON
    Table.id = other_table.id




Pueden observar en el siguiente link también su funcionalidad

Hasta la próxima, nos vemos

1 comentario:

Angelica dijo...

A pesar de haber estudiado informática en el colegio, en este momento ya no me interesa tanto esta carrera. Igualmente creo que es muy importante saber ciertos conceptos sobre ella. Creo que actualmente mi único vinculo con esta especialidad son los juegos para pc, jaja