none
Actualizar datos de una tabla dependiendo de resultados de consulta de otra tabla. RRS feed

  • Pregunta

  • Buenas amigos, un gusto saludarles. Actualmente me encuentro desarrollando una aplicacion en la que tengo una BD (BD_1), pero que tambien toma datos de otra BD (BD_2)de un sistema externo... Lo que quiero es actualizar datos de la BD_2 dependiendo de los resultados de una consulta de la BD_1.

    Tengo el siguiente select:

     SELECT hestado, ffinpago, idhcliente FROM Hpagos
     WHERE ffinpago <= '2017-03-14' and hestado = 1

    Eso me arroja dos registros como resultado (pueden ser N cantidad de registros), lo que quiero es actualizar la BD_2 donde los registros sean iguales que los arrojados en esa consulta SELECT. (ambas BD tienen el campo ID como "relacion").

    Espero haberme explicado bien, sin mas que decir espero su pronta ayuda, agradecido!


    SQL ADICTO Queriendo aprender cada día mas...

    martes, 14 de marzo de 2017 12:36

Respuestas

  • Ali Reyes,

    ¿Ambas bases de datos se encuentran dentro de una misma instancia de SQL Server?, de ser así bastará con nombrar adecuadamente al objeto bajo la forma [DataBase].[Schema].[Table], si se encuentran en instancias distintas debes vincular el origen para poder acceder a sus objetos y datos: Create Linked Servers

    Por otro lado, ¿qué significa que los registros sean iguales? ¿qué columnas participan en el match?, si deseas actualizar las filas donde exista coincidencia con el conjunto de datos que retorna la consulta de selección entonces no entiendo que hay que actualizar siendo que por comparación las columnas de ambas filas son iguales. Toma el siguiente ejemplo como base para realizar la actualización según tus reglas -que creo- no las expusiste bien.

    UPDATE  t2
    SET
        t2.hestado = t1.estado /*Actualizar valores de columnas*/
    FROM 
        BD_1.dbo.Hpagos t1
        BD_2.dbo.Hpagos t2 ON (t1.ID = t2.ID)
    WHERE 
        (t1.ffinpago <= '20170314') AND (t1.hestado = 1)
        AND (t1.ffinpago = t2.ffinpago) /*Igualar filas de ambas BD*/
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 14 de marzo de 2017 13:51
  • Hola que tal Ali Reyes, aqui te paso un Script que te puede servir para actualizar lo que nos comentas.

    Puedes crear tambien un Linked Server: Linked Server

    update bd2.Hpagos set bd2.Hpagos.campo1='',bd2.Hpagos.campo2='' where bd2.Hpagos.ID in (Select bd1.Hpagos.ID from bd1.Hpagos where bd1.Hpagos.ffinpago <= '2017-03-14' and bd1.Hpagos.hestado = 1)


    Business Intelligence Analyst

    martes, 14 de marzo de 2017 13:29

Todas las respuestas

  • Hola que tal Ali Reyes, aqui te paso un Script que te puede servir para actualizar lo que nos comentas.

    Puedes crear tambien un Linked Server: Linked Server

    update bd2.Hpagos set bd2.Hpagos.campo1='',bd2.Hpagos.campo2='' where bd2.Hpagos.ID in (Select bd1.Hpagos.ID from bd1.Hpagos where bd1.Hpagos.ffinpago <= '2017-03-14' and bd1.Hpagos.hestado = 1)


    Business Intelligence Analyst

    martes, 14 de marzo de 2017 13:29
  • Ali Reyes,

    ¿Ambas bases de datos se encuentran dentro de una misma instancia de SQL Server?, de ser así bastará con nombrar adecuadamente al objeto bajo la forma [DataBase].[Schema].[Table], si se encuentran en instancias distintas debes vincular el origen para poder acceder a sus objetos y datos: Create Linked Servers

    Por otro lado, ¿qué significa que los registros sean iguales? ¿qué columnas participan en el match?, si deseas actualizar las filas donde exista coincidencia con el conjunto de datos que retorna la consulta de selección entonces no entiendo que hay que actualizar siendo que por comparación las columnas de ambas filas son iguales. Toma el siguiente ejemplo como base para realizar la actualización según tus reglas -que creo- no las expusiste bien.

    UPDATE  t2
    SET
        t2.hestado = t1.estado /*Actualizar valores de columnas*/
    FROM 
        BD_1.dbo.Hpagos t1
        BD_2.dbo.Hpagos t2 ON (t1.ID = t2.ID)
    WHERE 
        (t1.ffinpago <= '20170314') AND (t1.hestado = 1)
        AND (t1.ffinpago = t2.ffinpago) /*Igualar filas de ambas BD*/
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 14 de marzo de 2017 13:51