Comparación de tablas e igualación

Nuevamente yo. Francisco. Tengo un problema: tengo alrededor de 30 tablas exactamente iguales en estructura, pero tengo un problema, los datos deberían estar exactamente iguales en todas las tablas y no lo están. Hay una tabla que llamo la t1 que es la base, o sea todas las tablas deberían estar igual que esta tabla (t1), tanto en cantidad de registros como en el contenido de información dentro de cada campo de cada uno de los registros. Cómo podría hacer para determinar las diferencias entre la t1 y todas las demás y ponerlas todas exactamente iguales. Lamentablemente no puedo borrarlas y copiarlas (insert usando a t1), porque algunos registros de las otras tablas tienen registros enlazados, lo cual impide que lo haga (llave foreanea).

1 respuesta

Respuesta
1
Francisco, todo bien, pero después te paso mi nro de cta así me transferís unos pesitos...:=)
Lo que tienes que hacer, técnicamente, se llama apareo de archivos y si yo lo tuviera que hacer comenzaría por:
a) Establecer cual es la tabla pivot o tomada como buena, digamos. Supongamos que es t1.
b) Establecer cual es el campo de vinculo con el resto de las tablas. Supongamos id. Esto es en toda tabla t1 con i variando de 1 a 30 todos tienen id y para mi, para poner un ejemplo, el registro de t1 con id 30 y el registro de t4 con id 30 deberían ser el mismo.
Una vez establecidas estas dos cuestiones arrancaría por definir 2 tareas básicas las que iré aplicando de a pares tomandot1 y ti donde i=2,3,... n donde n es el numero de tablas total
Desde i=2 hasta n
c) Primero establecer que registros de t1 no existen en ti e igualarlas. Esto es un id que existe en t1 pero no en ti.
d) Establecer que registros de ti tienen campos con distinto valor para igual registro en t1 y, si corresponde, actualizar los campos de ti con el valor de los campos de t1 para igual id. Esto es iguales id en t1 y en ti (de acuerdo a lo expuesto en b) debería ser el mismo registro) pero diferencia a nivel de campo.
Fin Desde
Ahora, sin conocer en profundidad tu problema, apostaría dinero en efectivo que tienes un problema de modelo de datos. No entiendo como podes tener 30 tablas iguales y te sea imposible tener una única tabla con la union de las 30.
Si estas de acuerdo en el planteo teórico, veremos los detalles de implementación. Dicho de otra forma expuse lo que yo creo que hay que hacer. SI estas de acuerdo, pasamos a ver lo más fácil, esto es como se hace.
Hernán, siempre y cuando las respuestas se mantengan con la calidad actual, no tengo problema en darte unos pesitos (y lo digo en serio!). Lo que pasa es que tengo la base de datos en SQL Server 2005 y tengo 30 "compañías / aulas" en una misma base de datos. Todo lo entendí perfectamente y sí; pasemos a ver los más fácil por favor.
Sean t1 y t2 las dos primeras tablas a analizar
Busquemos los registros de t1 que no estan en t2
select  A.* from t1 A left join t2 B on A.id=B.id where B.id is null
lo que podriamos probar es
insert into t2 (select A.* from t1 A left join t2 B on A.id=B.id where B.id is null)
Esto igualaria t1 y t2
Ojo con el tema de los id. Si el id es identidad tienes que ejecutar antes lo siguiente:
SET IDENTITY_INSERT t2 ON para permitir el insert de los id nuevos de t1 en  t2
Una vez emparejadas t1 y t2 busquemos las diferencias a nivel de campo
Veamos el campo c1. Busquemos que registros en t2 tienen un valor en c1 distinto a mismo id en t1
select  a.id,a.c1 from t2 a inner join t1 b on a.id=b.id where a.c1<>b.c1
el update seria
update t2 set c1=a.c1 from t1 a where t2.id=a.id and t2.c1<>a.c1
Esto habría que replicarlo para todos los campos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas