比较两个同名表在数据上的差异(转载)
2007-04-12 13:52
330 查看
胖子刘 原创 转载请注明出处 2007-1-8)
关于数据库应用系统的版本升级问题,有一个问题困扰了我很久,那就是如何比较开发服务器和正式服务器上的两个同名表在数据上有何差异。
一般情况下,我们所创建的数据库系统都会有几个表是属于应用系统正常运行的基础表,里面的数据会被硬编码进应用程序,这样的数据在运行时是不能更改的。
举个简单例子,假设我们的系统里有个表叫“功能表”,里面存储本系统所有已实现的功能代码和说明,用于权限分配及控制。这个表就是基础表,里面的数据就是固定数据,除非系统版本升级才有可能改动里面的记录外,其他任何时候都不能变动里面的数据,否则应用系统就可能会运行失常。
如果我们的系统里面有若干个这样的基础表,那么在系统升级的时候,我们就面临这样一个问题:假设最新版程序增加了10个功能,并且已经在“功能表”中插入这些数据,同时修改了原有的15条功能记录的某个字段的值,那么,我们如何将开发数据库中“功能表”的新增和变更内容实施到正式服务器上去?
也许有人会提出这样的方案——把正式服务器上的“功能表”清空,然后导入开发服务器上的数据。
这个方案有几个问题:(1)一个设计良好的数据库系统,必然有着良好的参照完整性约束,删除正式数据库可能会比较麻烦。(2)不符合“增量”升级的思想。(3)如何导入数据也是一个问题,最起码也要把开发数据库表内的记录生成Insert SQL脚本才行。
综合各方面的考虑,我一直在找一个方案,能够比较两个数据库中相同表的记录,并且能够生成合并两者的差异的SQL语句。找了很久而不得,由于时间关系,自己也一直没抽出时间来写这样一个程序。
直到某一天突然发现了SQL Server 2005附带的一个命令行工具“TableDiff”。
这正是我要的东西。它的语法并不复杂,大家可以查看联机帮助或者在命令提示符下键入“TableDiff /?”。
我举个例子吧,这就是它的用法:
C:/Program Files/Microsoft SQL Server/90/COM>tablediff -sourceserver 192.168.0.1 -sourcedatabase books -sourcetable T_Users -sourceschema dbo -sourcepassword sa -sourceuser sa -destinationserver 192.168.0.200 -destinationdatabase books -destinationtable T_Users -destinationschema dbo -destinationpassword sa -destinationuser sa -c -o c:/ls.sql -f
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1476978
关于数据库应用系统的版本升级问题,有一个问题困扰了我很久,那就是如何比较开发服务器和正式服务器上的两个同名表在数据上有何差异。
一般情况下,我们所创建的数据库系统都会有几个表是属于应用系统正常运行的基础表,里面的数据会被硬编码进应用程序,这样的数据在运行时是不能更改的。
举个简单例子,假设我们的系统里有个表叫“功能表”,里面存储本系统所有已实现的功能代码和说明,用于权限分配及控制。这个表就是基础表,里面的数据就是固定数据,除非系统版本升级才有可能改动里面的记录外,其他任何时候都不能变动里面的数据,否则应用系统就可能会运行失常。
如果我们的系统里面有若干个这样的基础表,那么在系统升级的时候,我们就面临这样一个问题:假设最新版程序增加了10个功能,并且已经在“功能表”中插入这些数据,同时修改了原有的15条功能记录的某个字段的值,那么,我们如何将开发数据库中“功能表”的新增和变更内容实施到正式服务器上去?
也许有人会提出这样的方案——把正式服务器上的“功能表”清空,然后导入开发服务器上的数据。
这个方案有几个问题:(1)一个设计良好的数据库系统,必然有着良好的参照完整性约束,删除正式数据库可能会比较麻烦。(2)不符合“增量”升级的思想。(3)如何导入数据也是一个问题,最起码也要把开发数据库表内的记录生成Insert SQL脚本才行。
综合各方面的考虑,我一直在找一个方案,能够比较两个数据库中相同表的记录,并且能够生成合并两者的差异的SQL语句。找了很久而不得,由于时间关系,自己也一直没抽出时间来写这样一个程序。
直到某一天突然发现了SQL Server 2005附带的一个命令行工具“TableDiff”。
这正是我要的东西。它的语法并不复杂,大家可以查看联机帮助或者在命令提示符下键入“TableDiff /?”。
我举个例子吧,这就是它的用法:
C:/Program Files/Microsoft SQL Server/90/COM>tablediff -sourceserver 192.168.0.1 -sourcedatabase books -sourcetable T_Users -sourceschema dbo -sourcepassword sa -sourceuser sa -destinationserver 192.168.0.200 -destinationdatabase books -destinationtable T_Users -destinationschema dbo -destinationpassword sa -destinationuser sa -c -o c:/ls.sql -f
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1476978
相关文章推荐
- 比较两个同名表在数据上的差异。
- (转载) 两个数据库比较 对比视图存储过程及表结构差异
- 比较两个List,取出差异数据
- Java比较两个bean数据差异
- 两个list<object> 比较 得到相同数据 差异数据
- 一个简单比较oracle两个用户下表数据差异的python脚本
- python比较两个excel表格的差异
- 比较两个文本中数据不同的行
- 比较两个Double类型的数据
- 比较数据泵和exp/imp对相同数据导出/导入的性能差异
- 比较两个的表结构差异
- 比较两个mysql数据库表结构的差异
- Windows Server 2008 各版本功能差异与比较各版本概观--转载
- VS2008 比较两个数据库的表结构差异,并同步
- 比较两个DataTable数据(结构相同),返回新增的,删除的,修改前的,修改后的 DataTable
- 基于SQL Server中如何比较两个表的各组数据 图解说明
- 在SQL Server中如何比较两个表的各组数据
- 转载 数据类型, T2COLE等宏,在MSDN上很难搜索到,故转载这个文章,比较全面
- 利用ORACLE的MINUS函数和OVER函数,直接通过视图实现两个记录集的比较。(转载)
- 比较两个表的数据差别