Ver Mensaje Individual
  #11 (permalink)  
Antiguo 23/06/2016, 06:32
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

Hola de nuevo Libras!

He estado probando y con el insert no tengo problemas, quedaría el sql así:

Código SQL:
Ver original
  1. INSERT INTO OPENQUERY(SERVIDOR_MYSQL,'SELECT campo1, campo2, campo3, campo4 FROM BD.tabla1')
  2.    SELECT ORIGEN.campo1, ORIGEN.campo2, ORIGEN.campo3, ORIGEN.campo4
  3.      FROM [BD_ORIGEN].[dbo].[tabla1] AS ORIGEN
  4. LEFT JOIN OPENQUERY(SERVIDOR_MYSQL,'SELECT campo1, campo2, campo3, campo4 FROM BD.tabla1') AS DESTINO
  5.        ON (ORIGEN.campo1 = DESTINO.campo1 AND ORIGEN.campo2 = DESTINO.campo2)
  6.     WHERE (DESTINO.campo1 IS NULL AND DESTINO.campo2 IS NULL)

pero con el update me da el siguiente error, aunque acaba haciendo los cambios:
"El proveedor OLE DB "MSDASQL" del servidor vinculado "XXXXXXXX" devolvió el mensaje "No se puede encontrar la fila para su actualización: algunos valores han cambiado desde la última vez que se leyó.".
Mens. 7343, Nivel 16, Estado 4, Línea 1
El proveedor OLE DB "MSDASQL" del servidor vinculado "XXXXXXXXI" no pudo UPDATE la tabla "[MSDASQL]". El conjunto de filas utiliza simultaneidad optimista y el valor de una columna ha cambiado desde que se capturó o"
La sql sería ésta:
Código SQL:
Ver original
  1. WITH DESTINO AS (
  2.    SELECT campo1, campo2, campo3, campo4
  3.    FROM OPENQUERY(SERVIDOR_MYSQL, 'SELECT campo1, campo2, campo3, campo4 FROM BD.tabla1')
  4. )
  5. UPDATE DESTINO
  6.   SET DESTINO.campo1 = COMPLETA.campo1,
  7.       DESTINO.campo2 = COMPLETA.campo2,
  8.       DESTINO.campo3 = COMPLETA.campo3,
  9.       DESTINO.campo4 = COMPLETA.campo4
  10. FROM
  11. (
  12. SELECT ORIGEN.campo1, ORIGEN.campo2, ORIGEN.campo3, ORIGEN.campo4
  13.      FROM [BD_ORIGEN].[dbo].[tabla1] AS ORIGEN
  14. LEFT JOIN OPENQUERY(SERVIDOR_MYSQL,'SELECT campo1, campo2, campo3, campo4 FROM BD.tabla1') AS DESTINO
  15.        ON (ORIGEN.campo1 = DESTINO.campo1 AND ORIGEN.campo2 = DESTINO.campo2)
  16.     WHERE (DESTINO.campo1 IS NOT NULL AND DESTINO.campo2 IS NOT NULL)
  17. ) AS COMPLETA
  18. WHERE (COMPLETA.campo1 = DESTINO.campo1 AND COMPLETA.campo2 = DESTINO.campo2)

Ves alguna o varias cosas mal en la sql del update?