Microsoft SQL Server:查找两个单独数据库之间的列差异

时间:2018-05-29 15:05:19

标签: sql-server

我希望有一个小测试我可以运行来比较两个在表结构中几乎相同的独立数据库。

以下是我正在看的内容......

MSSQLSERVER (Instance)
|  
|-- MY_DB1 
    |
    |-- Table_A 
        |-- Column_Foo
        |-- Column_Boo
|-- MY_DB2
    |
    |-- Table_A
        |-- Column_Foo
        |-- Column_WTF
        |-- Column_Boo

原谅上面粗略图,这只是为了说明这个想法。如您所见,我们有一个SQL Server实例MSSQLSERVER,它有两个独立的已恢复数据库。这两个数据库都有多个数据库表。我需要此测试来比较MY_DB1MY_DB2数据库,并向我显示具有不同列的任何表的列表。

根据以上示例,输出将指示:

MY_DB2 
|
|-- Table_A 
    |-- Column_WTF

它会显示Column_WTF,因为MY_DB1中找不到此内容。

我总是需要知道列是否是100%匹配,如果它们不匹配则它应该提供指示差异所在位置的输出。

我想用T-SQL做这件事,但是我也可以使用任何可能已经具有此功能的开源工具进行简单比较。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

也许是这样的

示例

;with cte as (
Select [Table_Catalog]
      ,[Table_Schema]
      ,[Table_Name]
      ,[Column_Name]
      ,Cnt = sum(1) over (Partition By [Table_Name],[Column_Name])
 From (
        Select * From [My_DB1].INFORMATION_SCHEMA.COLUMNS 
        Union All
        Select * From [My_DB2].INFORMATION_SCHEMA.COLUMNS 
       ) A
) 
Select * From cte Where Cnt=1

答案 1 :(得分:0)

Imo,最简单的方法是为两个数据库生成DDL并使用difftool(来自Visual Studio)来比较DDL。

在SSMS中,右键单击数据库(MY_DB1),"脚本数据库为","创建到",文件。 重复MY_DB2。

来自(visual studio)" Developers命令提示符":devenv.exe / diff file1 file2

文件参数必须具有文件的完整路径。