Comparar tablas e insertar registros nuevos

28/09/2005 - 12:05 por Jose_A | Informe spam
Antes que nada aviso que soy novato y he buscado pero no he encontrado nada
que me sirva para unas pruebas que me gustaría hacer...
Tengo dos tablas en bases de datos diferentes en servidores diferentes; una
tabla se actualiza automáticamente pero la otra no. Para actualizarla lo que
hago es truncar la tabla de la que no se actualiza y copiar entera la que sí,
pero mientras dura el proceso (que puede ser de dos minutos...) si consulto
la tabla obviamente no obtengo nada.
Me gustaría saber cómo puedo comparar las tablas, seleccionar los registros
diferentes e insertar sólo los nuevos puesto que así supongo que además
tardaría mucho menos.
Si la pregunta es muy simple agradecería que alguien me sobre la pista de la
respuesta...

Gracias a todos.

Preguntas similare

Leer las respuestas

#1 Carlos Sacristán
28/09/2005 - 12:22 | Informe spam
Lo primero de todo es identificar lo que hace diferente un registro de
una tabla a otro (todos los campos, sólo un par de ellos, etc). Una vez
hecho esto, el siguiente ejemplo te puede servir:

PK la misma) es el campo1
SELECT origen.*
FROM tablaOrigen origen LEFT JOIN tablaDestino destino ON
origen.PK=destino.PK
WHERE origen.campo1 <> destino.campo1

La sentencia anterior te dará únicamente los registros que existen en
las dos tablas (sus PK son iguales) pero los valores son diferentes
(campo1). Para actualizar los valores en la tabla destino, la siguiente
sentencia valdría:

UPDATE tablaDestino SET campo1=origen.campo1
FROM tablaOrigen origen LEFT JOIN tablaDestino destino ON
origen.PK=destino.PK
WHERE origen.campo1 <> destino.campo1

Lo único que tienes que cambiar es el nombre de las tablas y de los
campos por los que tú tienes.


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Jose_A" escribió en el mensaje
news:
Antes que nada aviso que soy novato y he buscado pero no he encontrado


nada
que me sirva para unas pruebas que me gustaría hacer...
Tengo dos tablas en bases de datos diferentes en servidores diferentes;


una
tabla se actualiza automáticamente pero la otra no. Para actualizarla lo


que
hago es truncar la tabla de la que no se actualiza y copiar entera la que


sí,
pero mientras dura el proceso (que puede ser de dos minutos...) si


consulto
la tabla obviamente no obtengo nada.
Me gustaría saber cómo puedo comparar las tablas, seleccionar los


registros
diferentes e insertar sólo los nuevos puesto que así supongo que además
tardaría mucho menos.
Si la pregunta es muy simple agradecería que alguien me sobre la pista de


la
respuesta...

Gracias a todos.
Respuesta Responder a este mensaje
#2 Jose_A
28/09/2005 - 13:13 | Informe spam
Gracias Carlos,

Y si no es mucha molestia: qué pasaría si lo que tengo que insertar son
registros diferentes pero que en lugar de estar en una tabla están en una
consulta; me explico:
hago un select de distintas tablas en la bd de origen con varias condiciones
y éste me devuelve una serie de registros que varían y quiero comparar con
los de la tabla de la bd de destino e insertar los registros de la consulta
select que NO están en la tabla de destino pero los que están en la de
destino y no en la consulta select, mantenerlos.

"Carlos Sacristán" escribió:

Lo primero de todo es identificar lo que hace diferente un registro de
una tabla a otro (todos los campos, sólo un par de ellos, etc). Una vez
hecho esto, el siguiente ejemplo te puede servir:

PK la misma) es el campo1
SELECT origen.*
FROM tablaOrigen origen LEFT JOIN tablaDestino destino ON
origen.PK=destino.PK
WHERE origen.campo1 <> destino.campo1

La sentencia anterior te dará únicamente los registros que existen en
las dos tablas (sus PK son iguales) pero los valores son diferentes
(campo1). Para actualizar los valores en la tabla destino, la siguiente
sentencia valdría:

UPDATE tablaDestino SET campo1=origen.campo1
FROM tablaOrigen origen LEFT JOIN tablaDestino destino ON
origen.PK=destino.PK
WHERE origen.campo1 <> destino.campo1

Lo único que tienes que cambiar es el nombre de las tablas y de los
campos por los que tú tienes.


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Jose_A" escribió en el mensaje
news:
> Antes que nada aviso que soy novato y he buscado pero no he encontrado
nada
> que me sirva para unas pruebas que me gustaría hacer...
> Tengo dos tablas en bases de datos diferentes en servidores diferentes;
una
> tabla se actualiza automáticamente pero la otra no. Para actualizarla lo
que
> hago es truncar la tabla de la que no se actualiza y copiar entera la que
sí,
> pero mientras dura el proceso (que puede ser de dos minutos...) si
consulto
> la tabla obviamente no obtengo nada.
> Me gustaría saber cómo puedo comparar las tablas, seleccionar los
registros
> diferentes e insertar sólo los nuevos puesto que así supongo que además
> tardaría mucho menos.
> Si la pregunta es muy simple agradecería que alguien me sobre la pista de
la
> respuesta...
>
> Gracias a todos.



Respuesta Responder a este mensaje
#3 Carlos Sacristán
28/09/2005 - 13:27 | Informe spam
No es molestia, ni mucho menos.

Si la consulta te devuelve los campos que deberías comparar con la tabla
destino para cargarlos en esta última, es algo tan simple como lo siguiente:

INSERT tablaDestino (campo1, campo2, ..., campoN)
SELECT vw.campo1, vw.campo2,... vw.campoN
FROM tuVista vw LEFT JOIN tablaDestino td ON vw.campoPK=td.campoPK
WHERE td.campoPK IS NULL


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Jose_A" escribió en el mensaje
news:
Gracias Carlos,

Y si no es mucha molestia: qué pasaría si lo que tengo que insertar son
registros diferentes pero que en lugar de estar en una tabla están en una
consulta; me explico:
hago un select de distintas tablas en la bd de origen con varias


condiciones
y éste me devuelve una serie de registros que varían y quiero comparar con
los de la tabla de la bd de destino e insertar los registros de la


consulta
select que NO están en la tabla de destino pero los que están en la de
destino y no en la consulta select, mantenerlos.

"Carlos Sacristán" escribió:

> Lo primero de todo es identificar lo que hace diferente un registro


de
> una tabla a otro (todos los campos, sólo un par de ellos, etc). Una vez
> hecho esto, el siguiente ejemplo te puede servir:
>


su
> PK la misma) es el campo1
> SELECT origen.*
> FROM tablaOrigen origen LEFT JOIN tablaDestino destino ON
> origen.PK=destino.PK
> WHERE origen.campo1 <> destino.campo1
>
> La sentencia anterior te dará únicamente los registros que existen


en
> las dos tablas (sus PK son iguales) pero los valores son diferentes
> (campo1). Para actualizar los valores en la tabla destino, la siguiente
> sentencia valdría:
>
> UPDATE tablaDestino SET campo1=origen.campo1
> FROM tablaOrigen origen LEFT JOIN tablaDestino destino ON
> origen.PK=destino.PK
> WHERE origen.campo1 <> destino.campo1
>
> Lo único que tienes que cambiar es el nombre de las tablas y de los
> campos por los que tú tienes.
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> "Jose_A" escribió en el mensaje
> news:
> > Antes que nada aviso que soy novato y he buscado pero no he encontrado
> nada
> > que me sirva para unas pruebas que me gustaría hacer...
> > Tengo dos tablas en bases de datos diferentes en servidores


diferentes;
> una
> > tabla se actualiza automáticamente pero la otra no. Para actualizarla


lo
> que
> > hago es truncar la tabla de la que no se actualiza y copiar entera la


que
> sí,
> > pero mientras dura el proceso (que puede ser de dos minutos...) si
> consulto
> > la tabla obviamente no obtengo nada.
> > Me gustaría saber cómo puedo comparar las tablas, seleccionar los
> registros
> > diferentes e insertar sólo los nuevos puesto que así supongo que


además
> > tardaría mucho menos.
> > Si la pregunta es muy simple agradecería que alguien me sobre la pista


de
> la
> > respuesta...
> >
> > Gracias a todos.
>
>
>
Respuesta Responder a este mensaje
#4 Carmelo J. Morales Muñoz
28/09/2005 - 13:57 | Informe spam
Hash: SHA1

Me suena una herramienta llamada algo así como redGate o no se que,
no estoy seguro, talvez alguien lo pueda clarificar, que te generaba
las diferencias entre las bases de datos que le indicases e incluso
un script .

Respuesta Responder a este mensaje
#5 Carlos Sacristán
28/09/2005 - 14:07 | Informe spam
Sí, SQLDataCompare. Pero, aunque es muy completa, es de pago.

Otra opción es SQLScripter, que te posibilita generar scripts de
manipulación de datos (te genera las sentencias INSERT, UPDATE o DELETE
según las opciones que selecciones). Aparte de que funciona muy bien, lo
mejor es que es gratis.


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Carmelo J. Morales Muñoz" escribió en el mensaje
news:pyv_e.5370$

Hash: SHA1

Me suena una herramienta llamada algo así como redGate o no se que,
no estoy seguro, talvez alguien lo pueda clarificar, que te generaba
las diferencias entre las bases de datos que le indicases e incluso
un script .



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida