SQLSERVER:如何批量核对数据库的表数据

        前几天,因为测试同事要发版,临时拉我过去帮忙做回归测试。因为版本管理混乱的问题,要发布一个全量版,开发写了个数据迁移脚本,测试同事就需要去验证脚本的正确性。肉眼核对那么多配置表肯定不科学啊,容易出错不说,效率也是真的低。于是同事求救,问我有没有什么好的办法去核对数据。我寻思着,虽然我没写过这种核对脚本,但这肯定是可以通过脚本去实现的。看着同事比较着急做测试,我就说我先研究下这个问题吧。哈哈,果不其然,一百度立马找到可行的法子。我按照大神们的步骤挨个走下来,轻轻松松15分钟搞定核对脚本。虽然事情不难,但我觉得还是挺有成就感的,很享受这种探索并取得小成功的感觉。

数据核对的步骤思路大致如下:
1、通过sql语句生成对比脚本,复制脚本内容;
2、找到本机mssql数据库自带的tablediff.exe工具所在的路径;
3、cmd模式进入到tablediff.exe所在的路径,粘贴前面生成的脚本内容,开始批量核对;
4、去指定路径下查看核对的差异表数据文件。
 
博客原文中的脚本有些不对( sysObjects和object_name (id)执行报错 ),我修改之后,可以运行成功。
以我们的统一认证系统为例,生成对比脚本的sql语句如下:
use kbss_kcas
SELECT 'tablediff.exe -sourceserver 10.202.83.110 -sourceuser sa -sourcepassword sa123 -sourcedatabase kbss_kcas -sourceschema dbo -sourcetable '+object_name (object_id)
+' -destinationserver 10.80.9.120 -destinationuser sa -destinationpassword sasa -destinationdatabase kbss_kcas -destinationschema dbo -destinationtable '
+object_name (object_id)+' -et Difference -f e:\data\'+object_name (object_id)+'.sql' as SQL
from sys.objects where type ='U'


脚本意思解析:
-sourceserver 10.202.83.110 sourceuser sa -sourcepassword sa123 -sourcedatabase kbss_kcas
sa是原始数据库用户,sa123是sa用户的密码,各位根据自己的设置更改,kbss_kcas是原始数据库。


-destinationserver 10.80.9.120 -destinationuser sa -destinationpassword sasa -destinationdatabase kbss_kcas
10.80.9.129是目标数据库实例,可以跨越实例比较,sa sasa kbss_kcas都是目标数据库用户名、密码、库名称


f e:\data\'+object_name (object_id)+'.sql' 这个是把比较结果,写道e:\data目录下,用表的名字命名。

 
原文具体说明详见:

posted @ 2020-09-21 14:01  你自律的样子真美  阅读(621)  评论(0编辑  收藏  举报