如何找出2张SQL表之间的内容差异并生成同步SQL

Dio*_*ung 13 sql-server sql-server-2008-r2

如何找出具有精确模式的两个表之间的数据差异,以及如何生成同步 SQL 以获得联合结果(无重复)?

这是2个表:

SOURCE01.dbo.Customers (31,022 rows)

TARGET01.dbo.Customers (29,300 rows)

每个表的架构是:

  • [CustomerId] : nvarchar(255)
  • [CustomerSerializedProfile]: nvarchar(max)
  • [CreatedDatetime] : DateTime

小智 8

除了前面答案中提到的 tablediff 和 powershell 之外,您还可以使用带有 UNION ALL 语句的 SQL 来查找 2 个相同表中不匹配的记录:

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;
Run Code Online (Sandbox Code Playgroud)

您可以尝试的另一个选项是在 Visual Studio 本身中使用数据比较。它比较源数据库和目标数据库中的数据,并为您选择进行同步的表创建同步脚本。

最后但并非最不重要的是,您可以使用 SQL 数据比较工具 - ApexSQL Data Diff来设置所有同步选项,使用不同名称映射表和列,创建您自己的键以在 GUI 中进行比较。您可以安排它在无人值守的情况下运行,您所要做的就是在早上检查 SQL Server 作业历史记录。如果您需要有关这些选项的更多详细信息,我建议您阅读这篇文章:http : //solutioncenter.apexsql.com/automatically-compare-and-synchronize-sql-server-data/


Mar*_*ith 6

令人惊讶的是,还没有人提到 SQL Server Data Tools 内置了这一功能。尽管与 Redgate 相比,该功能是基本的。

将一个或多个表中的数据与参考数据库中的数据进行比较和同步中的一些详细信息


Rea*_*ces 2

这应该会给出两个表之间的差异,然后您可以将其包装在插入查询中,将 A 的差异放入 B 中,反之亦然。

SELECT A.CustomerId, A.CustomerSerializedProfile, A.CreatedDatetime
  FROM SOURCE01.dbo.Customers A
 WHERE NOT EXISTS (SELECT B.ID
                 FROM TARGET01.dbo.Customers
                WHERE B.CustomerId= A.CustomerId
                  AND B.CustomerSerializedProfile= A.CustomerSerializedProfile
                  AND B.CreatedDatetime= A.CreatedDatetime)
Run Code Online (Sandbox Code Playgroud)