如何使用 SSMS 将数据库 1 表 1 与数据库 2 表 1 进行比较?

Jac*_*ack 2 sql-server ssms except

我有两个数据库 - Database1 和 Database2。

两个数据库都包含一个结构相似的表,示例如下:

================================================== ==========================================
| 身份证 | 姓名 | 电话无格式 | 拨打国家/地区代码 | 国际拨号代码 | 互联网顶级域名 |
================================================== ==========================================
| | | | | | |
================================================== ==========================================

但是,由于某种原因,(a) 一个数据库中的一个表的数据与 (b) 另一个数据库中的另一个表中包含的数据不完全相同。

所以,我怎么可以比较Database1.Table1反对Database2.Table1

我尝试使用以下查询,但什么也没发生,所以想知道是否必须重写它:

SELECT MIN(TableName) as TableName,
       ID,
       Name,
       PhoneNoFormat,
       DialingCountryCode,
       InternationalDialingCode,
       InternetTLD

FROM

(

  SELECT  'Table A' as TableName,
          A.ID,
          A.Name,
          A.PhoneNoFormat,
          A.DialingCountryCode,
          A.InternationalDialingCode,
          A.InternetTLD

  FROM [D:\DATABASE1.MDF].[dbo].[Table1] AS A

  UNION ALL

  SELECT 'Table B' as TableName,
         B.ID, B.Name,
         B.PhoneNoFormat,
         B.DialingCountryCode,
         B.InternationalDialingCode,
         B.InternetTLD

  FROM [D:\DATABASE2.MDF].[dbo].[Table1] AS B

) tmp

GROUP BY ID, Name, PhoneNoFormat, DialingCountryCode, InternationalDialingCode, InternetTLD

HAVING COUNT(*) = 1

ORDER BY ID
Run Code Online (Sandbox Code Playgroud)

Mar*_*ian 7

您的数据库名称不能是 [D:\DATABASE1.MDF],这可能是物理数据文件的路径。所以完整的表名(db.schema.table 中的 3 部分名称)是 [DATABASE1].[dbo].[Table1]。

如果是一次性任务,请使用Red Gate SQL 数据比较。这是一个很棒的工具,它提供了一个试用版。

如果你有 Visual Studio Professional,你还应该有数据比较工具。这是另一个比较数据和模式的好工具。

如果您无法使用任何其他工具来比较两个表中的数据,我将使用 tablediff.exe,它包含在 SQL Server 安装中。您将在 SQL Server 程序路径中找到它。此处的详细信息,在 MSDN 上。

如果您想使用 SQL,那么您可以使用函数binary_checksum(或其相关的checksum)来生成哈希并比较同一行的两个不同版本,以防您可以逐行比较。您还可以对每一列使用这些函数,而不仅仅是对整行(当然,根据键逐行进行)。请参阅此处的示例。