tablediff 是sqlserver自带的实用工具

sqlserver 2012 在110目录下,sqlserver2008在100目录下

官方参考文档如下:

https://docs.microsoft.com/en-us/sql/tools/tablediff-utility?view=sql-server-2017

既可以做一定级别的数据kpi验证,也可以用于 对比 测试环境和生产环境的 数据库表数据差异,并生成收敛差异的批量sql。

具体功能可以参考上述官方文档。

下面实测具体用途。

数据收敛首先要明确数据应该是什么样的,比如我测试环境需要同步生产环境数据,那么我需要收敛的是测试环境缺失的数据。

在这种情况下,我们需要把 源端定义为生产环境数据库,目标端定义为测试环境数据库。

源端数据库执行:

tablediff -sourceserver "生产环境数据库IP地址" -sourcedatabase "生产环境数据库" -sourceschema "生产环境架构名称"
-sourcetable "生产环境表" -sourceuser "生产环境登录名称"
-sourcepassword "生产环境密码" -destinationserver "测试环境数据库ip地址"
-destinationdatabase "测试环境数据库名称" -destinationschema "测试环境架构名称"
-destinationtable "测试环境的mapping表" -destinationuser "测试环境登录名" -destinationpassword "测试环境数据库用户密码"
-f "d:\tools\V_SYS_MESSAGES_Diff.sql"

这样就生成了收敛的sql,具体语句为insert。

坑1: tablediff 工具通过比较行内容进行收敛,是存在一定问题的,比如 “NULL” 值 是不能进行比较的,大对象字段很难比较,这需要将表进行视图转换:

过滤掉null,xtype等特殊字段。当然,表中没有这些字段或者无null更好。

源端执行:

declare @table_name nvarchar(100)
set @table_name='SYS_MESSAGES'
if exists (select 1 from sys.tables where name=@table_name)
begin
declare @table_info table
(id int identity(1,1) not null,info nvarchar(300))
insert into @table_info
select 'create view V_'+@table_name+'_Diff'
insert into @table_info
select 'as'
insert into @table_info
select 'select '
insert into @table_info
select case when isnullable=0 then tablename+','
else tablename+','+default_value+') as '+name+',' end
from (
select a.isnullable,a.name,b.xtype,
case when a.isnullable =0 then ' ['+a.name+']' else ' ISNULL('+a.name end as tablename,
case when b.xtype in (48,52,56,127) then '-100' --tinyint\smallint\int\bigint
when b.xtype in (59,60,62,106,108) then '1.01'--real\money\float\decimal\numeric
when b.xtype=40 then '''1900-01-01''' --date
when b.xtype=41 then '''01:00:01''' --time
when b.xtype=58 then '''1900-01-01 01:01:01''' --smalldatetime
when b.xtype=61 then '''1900-01-01 01:01:01.001''' --datetime
else '''@#''' end as default_value
from syscolumns a,systypes b
where a.id = OBJECT_ID(@table_name) and a.xtype = b.xusertype
)a where xtype not in(34,35,99,165,173,189,241)--xml\timestamp\binary\varbinary\ntext\text\image update @table_info set info=SUBSTRING(info,1,len(info)-1) where id=
(select MAX(id) from @table_info) insert into @table_info values('from dbo.['+@table_name+'] with(nolock)') select info from @table_info
end
else
print('Can not find the table '+@table_name)

生成视图的sql

create view V_SYS_MESSAGES_Diff
as
select
[MSG_ID],
ISNULL(MSG_TIME,'@#') as MSG_TIME,
ISNULL(MSG_TYPE,'@#') as MSG_TYPE,
ISNULL(MSG_CONTENT,'@#') as MSG_CONTENT,
ISNULL(MSG_USER,'@#') as MSG_USER,
ISNULL(MSG_MARK1,'@#') as MSG_MARK1,
ISNULL(MSG_MARK2,'@#') as MSG_MARK2,
ISNULL(MSG_MARK3,'@#') as MSG_MARK3,
ISNULL(PROCESS_FLAG,-100) as PROCESS_FLAG
from dbo.[SYS_MESSAGES] with(nolock)

目标端也重复上述操作。然后再利用tablediff工具进行对比收敛。

sqlserver tablediff 实用工具的更多相关文章

  1. Sqlserver tablediff的简单使用

    1. 先列举一下自己简单的比较语句 tablediff -sourceserver 10.24.160.73 -sourcedatabase cwbasemi70 -sourceschema lcmi ...

  2. SqlServer中sqlmaint 实用工具和xp_sqlmaint扩展过程

    sqlmaint 实用工具可以对一个或多个数据库执行一组指定的维护操作.使用 sqlmaint,可以运行 DBCC 检查.备份数据库及其事务日志.更新统计以及重建索引.所有数据库维护活动都会生成报表, ...

  3. Bootstrap<基础十> 响应式实用工具

    Bootstrap 提供了一些辅助类,以便更快地实现对移动设备友好的开发.这些可以通过媒体查询结合大型.小型和中型设备,实现内容对设备的显示和隐藏. 需要谨慎使用这些工具,避免在同一个站点创建完全不同 ...

  4. 10款让WEB前端开发人员更轻松的实用工具

    这篇文章介绍10款让Web前端开发人员生活更轻松的实用工具.每个Web开发人员都有自己的工具箱,这样工作中碰到的每个问题都有一个好的解决方案供选择. 对于每一项工作,开发人员需要特定的辅助工具,所以如 ...

  5. 十款让 Web 前端开发人员更轻松的实用工具

    这篇文章介绍十款让 Web 前端开发人员生活更轻松的实用工具.每个 Web 开发人员都有自己的工具箱,这样工作中碰到的每个问题都有一个好的解决方案供选择. 对于每一项工作,开发人员需要特定的辅助工具, ...

  6. .Net 高效开发之不可错过的实用工具(转)

    .Net 高效开发之不可错过的实用工具(转) 本文摘自: http://www.cnblogs.com/powertoolsteam/p/5240908.html#3372237 Visual Stu ...

  7. 实用工具推荐(Live Writer)(2015年05月26日)

    1.写博客的实用工具 推荐软件:Live Writer 使用步骤: 1.安装 Live Essential 2011,下载地址:http://explore.live.com/windows-live ...

  8. 快速访问WCF服务--ServiceModel 元数据实用工具 (Svcutil.exe)

    基本定义 ServiceModel 元数据实用工具用于依据元数据文档生成服务模型代码,以及依据服务模型代码生成元数据文档. SvcUtil.exe ServiceModel 元数据实用工具可在 Win ...

  9. Mac开发者必备实用工具推荐

    最近一个师兄给我推荐了一些Mac上的实用工具,用起来非常顺手,能提高不少开发效率.于是就想着把自己之前用过的其他工具也整理一下,一块推荐给大家,希望能对大家有帮助. Alfred 目前Mac下最好用的 ...

随机推荐

  1. js实现生成中间带图片的二维码

    之前需要实现生成中间带图片的二维码,所以找了半天终于找到一个可以用的.于是在这里记录一下. 下面是需要注意的几点: 1.使用的js为jquery-qrcode 但是已经经过别人的修改,和网上原来的那些 ...

  2. Java之建造者模式(Builder Pattern)(转)

    1.概念 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. [构建与表示分离,同构建不同表示] 与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者 ...

  3. 22-hadoop-hive搭建

    1, hive简介 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是 ...

  4. java为什么使用TypeReference

    用途 在使用fastJson时,对于泛型的反序列化很多场景下都会使用到TypeReference,例如: void testTypeReference() { List<Integer> ...

  5. 1657 Distance on Chessboard(简单计算题)

    描述 国际象棋的棋盘是黑白相间的8 * 8的方格,棋子放在格子中间.如下图所示:王.后.车.象的走子规则如下: 王:横.直.斜都可以走,但每步限走一格. 后:横.直.斜都可以走,每步格数不受限制. 车 ...

  6. C# 异常语句 跳转语句 while循环 穷举法 迭代法

    一  异常语句   ♦ try.....catch....finally 结构形式 try{ 可能会出错的代码语句 如果这里出错了,那么不会在继续下面的代码,而是直接进入catch中处理异常}catc ...

  7. [android] 轮播图-滑动图片标题焦点

    谷歌提供的v4包,ViewPager 在布局文件中,先添加<android.support.v4.view.ViewPager/>控件,这个只是轮播的区域 在布局文件中,布置标题描述部分 ...

  8. PHP语法-该注意的细节

    php in_array(mixed $needle, array $haystack[, bool $strict = FALSE] ) 注意: 一.如果$needle 是字符串,则比较是区分大小写 ...

  9. Retrofit 2.0 使用和原理

    使用教程: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1016/3588.html retrofit2 与okhttp关系 ...

  10. SpringBoot —— AOP注解式拦截与方法规则拦截

    AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件. SpringBoot中AOP的使用 ...