sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo fusionar dos datos de base de datos idénticos en uno?

Usted dice que ambos clientes están usando su aplicación, así que asumo que es una especie de software "retractilado" que usan más clientes además de estos dos, ¿correcto?

En caso afirmativo, agregar columnas especiales a las tablas o algo como esto probablemente cause problemas en el futuro, porque tendría que mantener una versión especial para estos dos clientes que pueda manejar las columnas adicionales. O tendría que introducir estas columnas en su base de código principal, lo que significa que todos sus otros clientes también las obtendrían.

Puedo pensar en una manera más fácil de hacer esto sin cambiar ninguna de sus tablas ni agregar columnas.
Para que esto funcione, necesita encontrar la ID más grande que existe en ambas bases de datos juntas ( no importa en qué tabla o en qué base de datos se encuentre) .

Esto puede requerir algo de copiar y pegar para obtener muchas consultas como esta:

select max(id) as maxlocationid from locations
select max(id) as maxpersonid from persons
-- and so on... (one query for each table)

Cuando encuentre el ID más grande después de ejecutar la consulta en ambas bases de datos, tome un número mayor que ese ID y agréguelo a todos los ID en todas las tablas de la segunda base de datos.
Es muy importante que el número debe ser más grande que el ID más grande que ya existe en ambas bases de datos.

Es un poco difícil de explicar, así que aquí hay un ejemplo:

Digamos que la ID más grande en cualquier tabla en ambas bases de datos es 8000 .
Luego ejecuta un SQL que agrega 10000 a cada ID en cada tabla en la segunda base de datos :

update Locations set Id = Id + 10000
update Persons set Id = Id + 10000, LocationId = LocationId + 10000
-- and so on, for each table

Las consultas son relativamente simples, pero esto es lo que más trabajo requiere porque debe crear una consulta como esta manualmente para cada tabla en la base de datos, con los nombres correctos de todas las columnas de ID.

Después de ejecutar la consulta en la segunda base de datos, los datos de ejemplo de su pregunta se verán así:

Base de datos 1: (exactamente como antes)

Locations :

Id    Name         Adress   etc....
1     Location 1
2     Location 2

Persons :

Id    LocationId     Name     etc...
1     1              Alex
2     1              Peter
3     2              Lisa

Base de datos 2:

Locations :

Id    Name         Adress   etc....
10001 Location A
10002 Location B

Persons :

Id    LocationId     Name     etc...
10001 10001          Mark
10002 10002          Ashley
10003 10001          Ben

¡Y eso es! Ahora puede importar los datos de una base de datos a otra, sin que se produzca ninguna violación de la clave principal.