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)
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