Microsoft 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来做这件事,但我也对任何可能已经具有此功能的开源工具持开放态度,以便进行简单比较。

感谢您的任何帮助。

也许是这样的

;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

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

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

从(Visual studio("开发人员命令提示符":devenv.exe/diff file1 file2

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

最新更新