Principales respuestas
Actualizar datos de una tabla dependiendo de resultados de consulta de otra tabla.

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...
Respuestas
-
¿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.- Propuesto como respuesta Joyce_ACModerator martes, 14 de marzo de 2017 15:30
- Marcado como respuesta Joyce_ACModerator martes, 21 de marzo de 2017 15:21
-
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
- Propuesto como respuesta Joyce_ACModerator martes, 14 de marzo de 2017 15:30
- Marcado como respuesta Joyce_ACModerator martes, 21 de marzo de 2017 15:21
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
- Propuesto como respuesta Joyce_ACModerator martes, 14 de marzo de 2017 15:30
- Marcado como respuesta Joyce_ACModerator martes, 21 de marzo de 2017 15:21
-
¿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.- Propuesto como respuesta Joyce_ACModerator martes, 14 de marzo de 2017 15:30
- Marcado como respuesta Joyce_ACModerator martes, 21 de marzo de 2017 15:21