Además de tablediff y powershell mencionados en las respuestas anteriores, también puede usar SQL con la instrucción UNION ALL para encontrar los registros que no coinciden en 2 tablas idénticas:
SELECT MIN(TableName) AS TableName
,ID
,NAME
,lastname
,Address
,City
FROM (
SELECT 'Table A' AS TableName
,Customers.id
,Customers.NAME
,Customers.lastname
,Customers.Address
,Customers.City
FROM Customers
UNION ALL
SELECT 'Table B' AS TableName
,CustomersOld.id
,CustomersOld.NAME
,CustomersOld.lastname
,CustomersOld.Address
,CustomersOld.City
FROM CustomersOld
) tmp
GROUP BY ID
,NAME
,lastname
,Address
,City
HAVING COUNT(*) = 1
ORDER BY id;
Otra opción que puede probar es usar Data Compare en Visual Studio. Compara los datos en la base de datos de origen y la base de datos de destino y crea un script de sincronización para las tablas que ha seleccionado para la sincronización.
Y por último, pero no menos importante, puede usar la herramienta de comparación de datos SQL: ApexSQL Data Diff , para configurar todas las opciones de sincronización, mapear las tablas y columnas con diferentes nombres, crear sus propias claves para comparar en la GUI. Puede programarlo para que se ejecute sin supervisión y todo lo que tiene que hacer es verificar el historial de trabajos de SQL Server por la mañana. Si necesita más detalles sobre estas opciones, le recomiendo leer este artículo: http://solutioncenter.apexsql.com/automatically-compare-and-synchronize-sql-server-data/
Usando herramientas nativas:
tablediff : la utilidad tablediff compara los datos en la tabla de origen con la tabla en la tabla de destino.
powershell: compare-object le permite lograr eso. aquí hay un buen ejemplo
tercero:
esquema de redgate y comparación de datos. Incluso puede usar powershell y comparar esquemas / datos para automatizar las cosas.
fuente
He usado este recientemente para un propósito similar:
Depende de que la clave primaria sea consistente. Pero debes tener algo consistente después de todo. Un meta script para generar código como el anterior es relativamente fácil de escribir y hace que las tablas de muchas columnas sean fáciles de comparar.
En cuanto a la sincronización, deberá hacerlo
source left join target
ytarget left join source
luego decidir qué desea hacer con el resultado de cada uno.fuente
Esto debería darle las diferencias entre las dos tablas, luego puede envolver esto en una consulta de inserción para colocar las diferencias de A en B o viceversa.
fuente
Una de nuestras herramientas gratuitas tiene una interfaz completa para TableDiff:
http://nobhillsoft.com/Diana.aspx
Además, consulte nuestra herramienta de comparación de bases de datos. Es el único que compara una cantidad ilimitada de datos (ninguno de los otros puede hacer millones y millones de registros) ... siempre que compare entre 2 servidores que están vinculados
http://nobhillsoft.com/NHDBCompare.aspx
(Vimos otros enlaces en este hilo para productos de terceros, por lo que creemos que es legítimo mencionar el nuestro ... por favor, háganos saber si no es así)
fuente
Si ambas tablas tienen claves primarias similares, puede usar la siguiente estrategia para comparar las tablas de origen y de destino: (Marqué las columnas de clave compuesta con un asterisco)
Esto funciona porque la unión devuelve implícitamente registros distintos. Entonces, para cualquier fila dada (identificada por alguna clave) en la fuente que espera que coincida exactamente en el objetivo, esperaría que una unión del src y el objetivo devuelva 1 fila para cualquier clave dada. Por lo tanto, puede usar la estrategia anterior para averiguar qué claves devuelven un resultado de unión que tiene varias filas, luego consultar el objetivo de unión src nuevamente (esta vez solo seleccionando los registros que tienen diferencias uniéndose con la tabla de diferencias) seleccionando todas las columnas que desea compare, ordenando por las columnas que componen la clave, y verá exactamente qué columnas no coinciden. Tenga en cuenta que los nombres de columna en el origen y el destino no tienen por qué coincidir, ya que pueden ser alias entre sí mediante una declaración "como".
fuente
Para encontrar las diferencias entre dos tablas idénticas
SELECT *
FROM SOURCE01.dbo.Customers
UNION
SELECT *
FROM TARGET01.dbo.Customers
EXCEPT
SELECT *
FROM SOURCE01.dbo.Customers
INTERSECT
SELECT *
FROM TARGET01.dbo.Customers
El orden de las operaciones hace que INTERSECT se realice primero, lo que le dará un conjunto de datos de solo filas que existen en ambas tablas. En segundo lugar, se realiza UNION, que le proporciona todas las filas de ambas tablas sin duplicados. Finalmente, se realiza el EXCEPTO que elimina de su UNION (todas las filas de ambas tablas) el conjunto de datos INTERSECT que son las filas en ambas tablas. Esto lo deja con un conjunto de datos que contiene solo las filas que existen en una de las tablas pero no en la otra. Si su conjunto de datos vuelve vacío, todas las filas son iguales entre las tablas.
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql
fuente
Tuve un problema similar y utilicé el comando 'EXCEPTO' de SQL para resolver el problema. El comando EXCEPT toma dos instrucciones SELECT y devuelve las filas que devuelve la primera instrucción SELECT (izquierda) y no la segunda (derecha) instrucción SELECT.
PD: el esquema para ambas tablas devueltas por la instrucción SELECT debe coincidir.
Para mayor claridad, visite: Página de puntos de tutoriales aquí
fuente
El script (cuando se proporciona con los detalles relevantes) compara 2 tablas (digamos Clientes en el servidor1 con Clientes en el Servidor2).
Este script será útil si está comparando una tabla con muchas columnas pero le cuesta encontrar la columna que no coincide exactamente.
Tengo una tabla con 353 columnas y tuve que compararla con otra tabla y encontrar que los valores no coincidían y este script lo ayudará a localizar la tupla exacta.
fuente
Creo que deberías probar xSQL Data Compare , que hará el truco en tu caso. Digamos, por ejemplo, que especificas
Después de comparar las tablas, en el resultado de la comparación, puede especificar que desea sincronizar solo las diferencias de la tabla izquierda que producirían un script SQL para insertar en TARGET01.dbo. Los clientes todas las filas que no están en esta tabla pero existen en SOURCE01.dbo.Customers (Lograr un resultado UNION sin duplicados). ¡Espero que esto ayude!
Divulgación: estoy afiliado a xSQL.
fuente