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)
您的数据库名称不能是 [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)来生成哈希并比较同一行的两个不同版本,以防您可以逐行比较。您还可以对每一列使用这些函数,而不仅仅是对整行(当然,根据键逐行进行)。请参阅此处的示例。