SQL 数据比较 - 缺少一些表格

SQL Data Compare - Some tables missing

当通过 VS 2013 pro 使用 SQL 服务器数据工具进行数据比较时,我遇到了一些 table 似乎被遗漏的情况。

我的意思是源服务器上的 TableA 中有数据,但目标服务器上的等效 table 中没有数据。

但是结果 window 甚至没有显示 TableA 的一行。

此外,如果我在下一步中尝试在按 "Finish" 之前过滤结果,TableA 不会显示为过滤依据的选项。就好像 table 在目标服务器上不存在一样。我已经通过以下方式验证了这一点:

在这两种情况下,我都可以看到列出了 table。

还有其他人看到了吗?我错过了什么?

只有当您知道必须比较 table 中的哪些记录时,才能比较数据。比较器使用 PK 来知道要比较哪些记录。如果您的 table 没有 PK(或至少没有唯一索引),那么它会从 tables 列表中丢失。

可以自己创建PK来解决(只是为了对比)

编辑

  1. 一位同事最近遇到了困难,因为有人从比较项目中明确排除了一些 table 并将其提交给 git。所以如果不是新项目就检查一下吧

  2. 我最近的任务是比较没有 PK 的 tables,发现 HASHBYTES to be a new friend, also there are not unique rows in the tables and to solve it I used ROW_NUMBER 有 PARTITION,见下面的片段。

    SELECT Row_number() 
             OVER ( 
               partition BY [hashid] 
               ORDER BY [hashid]) AS RowNumber, 
           * 
    INTO   [dbo].[mytable_temp] 
    FROM   (SELECT Hashbytes('SHA2_512', (SELECT x.* 
                                          FOR xml raw)) AS [HASHID], 
                   * 
            FROM   [dbo].[mytable] AS x) AS y 

    go 

    ALTER TABLE [dbo].[mytable_temp] 
      ALTER COLUMN [hashid] VARBINARY(900) NOT NULL 

    ALTER TABLE [dbo].[mytable_temp] 
      ALTER COLUMN [rownumber] BIGINT NOT NULL 

    go 

    ALTER TABLE [dbo].[mytable_temp] 
      ADD CONSTRAINT pk_id PRIMARY KEY ([hashid], [rownumber]) 

    go 

这样我就可以根据用整行内容计算的散列来创建 PK。

观测:。请注意,我比较的是 MyTable_TEMP 而不是 MyTable。这样我就可以保持原状。

该工具区分大小写。我不得不将模式从 core 重命名为 Core 以显示该模式中的表,因为另一个数据库的名称为 Core.