Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/06/2016, 04:21
Azor
 
Fecha de Ingreso: febrero-2014
Ubicación: España
Mensajes: 60
Antigüedad: 10 años, 2 meses
Puntos: 1
Respuesta: Openquery y merge

Bueno, por suerte una alma caritativa (a la que le agradezco mucho la ayuda), me echó una mano indicándome que utilizara una CTE para mi sql, quedando algo parecido a ésto:
Código SQL:
Ver original
  1. WITH DESTINO AS (
  2.    SELECT empresa, campo1, campo2, campo3, campo4
  3.    FROM OPENQUERY(SERVIDOR_MYSQL, 'campo1, campo2, campo3, campo4 FROM SRV_VINCULADO.bd.tabla1')
  4. )
  5. MERGE INTO DESTINO
  6. USING ([BD_ORIGEN].[dbo].[tabla1]) AS ORIGEN
  7.    ON (ORIGEN.campo1 = DESTINO.campo1 AND ORIGEN.campo2 = DESTINO.campo2)
  8.  WHEN MATCHED THEN UPDATE
  9.       SET DESTINO.campo3 = ORIGEN.campo3,
  10.           DESTINO.campo4 = ORIGEN.campo4
  11. WHEN NOT MATCHED THEN INSERT
  12.       VALUES(ORIGEN.campo1,
  13.              ORIGEN.campo2,
  14.              ORIGEN.campo3,
  15.              ORIGEN.campo4)
  16. WHEN NOT MATCHED BY SOURCE THEN DELETE;

Con lo cual, el alias ya no es un problema, pero la selec ahora me devuelve el siguiente error:
"El destino de una instrucción MERGE no puede ser una tabla remota, una vista remota o una vista sobre tablas remotas"
Merge me facilita mucho el trabajo a la hora de estar actualizando/insertando registros en mysql, pero parece que tiene la "limitación" que describe el error anterior.

El servidor de SQLSERVER lo tengo en local, pero el de MYSQL está alojado fuera.

El sentido de la inserción siempre sería de SQLSERVER > MYSQL, nunca a la inversa.

Alguien se ha encontrado con algo parecido?


Muchas gracias!