我希望有一个小测试,我可以运行它来比较两个单独的数据库,这两个数据库在表结构上几乎相同。
这是我正在看的...
MSSQLSERVER (Instance)
|
|-- MY_DB1
|
|-- Table_A
|-- Column_Foo
|-- Column_Boo
|-- MY_DB2
|
|-- Table_A
|-- Column_Foo
|-- Column_WTF
|-- Column_Boo
请原谅上面的粗略图表,这只是为了说明这个想法。如您所见,我们有一个 SQL Server 实例MSSQLSERVER
它有两个单独的还原数据库。这两个数据库都有多个数据库表。我需要这个测试来比较MY_DB1
和MY_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
文件参数必须具有文件的完整路径。