数据库比较器






4.11/5 (17投票s)
使用此工具,您可以比较两个数据库并生成差异报告。
介绍
现在,Microsoft SQL Server是世界上最流行的DBMS之一,大多数公司和软件工程师都将其用作数据库。 在程序的开发和维护过程中,不清楚数据库是否已更改。 例如,当您在客户的站点上安装您的程序时,一段时间后,如果您想升级此软件/数据库,您必须拥有更重要的数据,因为如果您无法正确升级数据库,那么您的程序将无法正常工作。 为了解决这个问题,我认为如果有一种工具可以将主数据库(在开发人员的站点上)与从数据库(在客户的站点上)进行比较,并找出它们之间的差异,它可以帮助我们正确地维护程序。
设计
对于此工具的设计和实现,我使用了C#.NET,并将我的工具指定为Microsoft SQL Server 2000。我的程序的用户界面有2个部分
- 主部分
- 从属部分
在主部分中,程序从开发人员端的主站点检索信息,而在从属部分中,它从客户站点检索信息。 从数据库中检索的信息涉及表列表,表名,列名,列类型等。对于检索表列表的第一步,在SQL Server 2000中,有关表和视图的所有信息都存储在名称为“sysobjects
”的表中。 为了从此表中检索信息,我使用了如下查询
SELECT name AS TableName, id FROM dbo.sysobjects WHERE (xtype = 'u')
在获得两个数据库中的表列表之后,现在我可以比较表列表并找出哪个表是新表。 主列表中存在但从属列表中不存在的每个表都是新表。 但是对于比较两个数据库,这还不够,因为可能某些表的列已更改,并且通过这种方法,我们无法找到这些更改。 为了完成我的方法,我必须逐个比较每个表并检索每个表的信息。 为了检索表的信息,我使用了如下查询
SELECT dbo.syscolumns.id, dbo.syscolumns.name AS Col, dbo.systypes.name AS TypeName,
dbo.sysobjects.name AS TableName, dbo.syscolumns.length AS Len FROM dbo.syscolumn
s INNER JOIN dbo.systypes ON dbo.syscolumns.xtype = dbo.systypes.xusertype INNER JOIN dbo
.sysobjects ON dbo.syscolumns.id = dbo.sysobjects.id WHERE (dbo.sysobjects.xtype = 'u
') AND dbo.sysobjects.name like [TABLENAME]
在检索诸如列名,列类型和列大小之类的信息之后,现在我可以比较并找到更好的结果。
用户界面
为了使用我的程序,在我的程序的左侧,您可以看到主部分,而在右侧,您可以看到从属部分。 对于每个部分,您都必须键入服务器名称,用户ID和密码才能连接。 连接到数据库后,您现在只需单击“比较!”即可。
为了更好地进行虚拟比较,我对每个数据库都使用一个树。 在树的第一层,您可以看到表列表,并且通过展开每个节点,您可以看到其信息,例如列名,列类型等。

在此版本的程序中,该软件仅显示差异,但对于未来的工作,我想使用此信息软件生成SQL脚本文件,该文件可以保存到文件中,客户可以执行该文件来升级他/她的数据库。
下一个版本(1.1)
在此版本中,您可以将数据库的架构保存到文件中(* .schema)
以后您可以离线获取数据库的架构。
在下一张图片中,您可以看到您所期望的一切
未来工作
将来,这可能会生成SQL报告。
历史
- 2008年12月29日:初始发布
- 2009年1月8日:发布版本1.1