用批处理写的自动生成tablediff脚本的工具

java Batch 批处理开发自动化工具 jaime 介绍 java Batch 自动化开发工具 Jaime Jaime 由日本Canaly公司 于2012开发 是用来生成batch文件(也就是job)的自动化工具。 常见的应用场景为生成 Database toDatabase File to File Database to File ** File to Databse** 剧宣传拥有比SpringBatch 更高的性能与代码生成质量。 Jaime 使用eclipse开发环境,可采取GUI的方式进行操作,方便大大滴。 如图 所示为Jaime 的nbx文件 阅读详情
工具的作用:通过交互式提问生成tablediff的执行命令,而且将命令执行后生成的同步数据脚本和日志放在指定的目录中。
工具的好处:可以将要通过tablediff比较的表放到广本文件tables.txt中。该批处理会遍历该文件中的每一行。会将每张表tablediff执行后生成和表名和目的机器名对就的.sql文件。要执行时,直接根据文件名就可以看出在什么订阅的机器上执行。
 
使用注意:每次执行前,需要编辑tables.txt文件,将要进行tablediff校验的表名放到该文件中,同时需要删除tabcomp.bat文件,该文件会在交互式提问后生成最新的。当交互式操作完成后,执行tabcomp.bat命令就可以在指定的目录中生成tablediff的结果了。
 
批处理代码如下:


@echo off
if not exist tables.txt (goto end)

:sourceserver
set sourceserver=
set /p  sourceserver=请输入源机器名字
if "%sourceserver%" == "" goto sourceserver

:sourcedatabase
set sourcedatabase=
set /p  sourcedatabase=请输入源数据库名字
if "%sourcedatabase%" == "" goto sourcedatabase

:sourceschema
set sourceschema=
set /p  sourceschema=请输入源架构名
if "%sourceschema%" == "" goto sourceschema

:sourceuser
set sourceuser=
set /p  sourceuser=请输入源用户名
if "%sourceuser%" == "" goto sourceuser

:sourcepassword
set sourcepassword=
set /p  sourcepassword=请输入源用户密码
if "%sourcepassword%" == "" goto sourcepassword

:destinationserver
set destinationserver=
set /p  destinationserver=请输入目的机器名字
if "%destinationserver%" == "" goto destinationserver

:destinationdatabase
set destinationdatabase=
set /p  destinationdatabase=请输入目的数据库名字
if "%destinationdatabase%" == "" goto destinationdatabase

:destinationschema
set destinationschema=
set /p  destinationschema=请输入目的架构名
if "%destinationschema%" == "" goto destinationschema

:destinationuser
set destinationuser=
set /p  destinationuser=请输入目的用户名
if "%destinationuser%" == "" goto destinationuser

:destinationpassword
set destinationpassword=
set /p  destinationpassword=请输入目的用户密码
if "%destinationpassword%" == "" goto destinationpassword

:datapath
set datapath=
set /p  datapath=请输入保存生成文件的路径(默认为当前目录):

for /F %%i in (tables.txt) do @echo tablediff /sourceserver"%sourceserver%" /sourcedatabase"%sourcedatabase%" /sourceschema"%sourceschema%" /sourcetable"%%i" /sourceuser"%sourceuser%" /sourcepassword"%sourcepassword%" /destinationserver"%destinationserver%" /destinationdatabase"%destinationdatabase%" /destinationschema"%destinationschema%" /destinationtable"%%i" /destinationuser"%destinationuser%" /destinationpassword"%destinationpassword%" /f"%datapath%.\syn%%i-%destinationserver%.sql" /o"%datapath%.\output-%%i-%destinationserver%.txt">>tabcompc.bat
rem echo copy syn*%destinationserver%.sql syn%destinationserver%-Z.SQL>>tabcomp.bat
rem echo sqlcmd -S%destinationserver%  -U%destinationuser%  -P%destinationpassword%   -d %destinationdatabase% -f i:65001  -i syn%destinationserver%-Z.SQL   -o execsyn%destinationserver%.log>>tabcomp.bat
echo for %%%%f in (*.sql) do  sqlcmd -S %destinationserver%  -U %destinationuser%  -P %destinationpassword%   -d %destinationdatabase% -f i:65001  -i %%%%f  -o execsyn%%%%f.log>>tabcompc.bat
set sourceserver=
set sourcedatabase=
set sourceschema=
set sourcetable=
set sourcelocked=
set sourceuser=
set sourcepassword=
set destinationdatabase=
set destinationlocked=
set destinationpassword=
set destinationschema=
set destinationserver=
set destinationtable=
set destinationuser=
set datapath=
:end
echo tables.txt文件不存在请手工生成该文件

以上的批处理中有两行注释掉了,这两行的功能是分别将TABLEDIFF生成的SQL文件使用SQLCMD命令行到目的机器上去执行,只使用一行就行,这两行的差异在于将生成的多个SQL文件是分别执行还是合并在一起执行,如果合并在一起执行的话,SQL文件就会很大,但SQLCMD这个工具对大的SQL文件执行会报“内存不足”的错误,咨询过微软也没有好的解决方案,只能算是这个EXE的特点了。

 

但如果是在SQL2000的环境通过TABLEDIFF进行比差异,需要有Frame work的支持,而且SQL2000中没有SQLCMD功能,原来的ISQL和OSQL也不支持代码页的转换不向SQLCMD中有-f参数,这样对于我们做批处理就是一个小障碍。所以对于纯SQL2000的环境中要使用TABLEDIFF进行差异比对和差异数据的执行,必须要通过写字板手工转换差异SQL文件,如果要写批处理,则必须找一个命令行的UTF-8转换为UNICODE代码的工具,在网上找了一个强人写的一个VBS,试过后很爽。所以在此推荐给大家,代码如下:

' *==============================================================================*
' * CMD 命令行编码转换工具包括GB2312,UTF-8,Unicode,BIG5...支持拖拽、文件另保存为 *
' * CodeChange.vbs     BY: yongfa365
' * GB2Ue.vbs          BY: fastslz
' *==============================================================================*
aCode = "GB2312"
bCode = "Unicode"
Show = "本脚本仅支持"&aCode&"到"&bCode&"的转换,请拖拽单个要转换的文件到此文件上!    "
Usage1 = "语法1:GB2Ue.vbs [驱动器][目录][文件名] (直接替换原文件模式)"
Usage2 = "语法2:GB2Ue.vbs [驱动器][目录][文件名]  [目标驱动器][目录][新名称] /Y"
Usage3 = "        如果目标新文件已存在,使用/Y参数后将直接替换而不提示是否改写!  "
Usage4 = "命令行编码转换工具 BY: fastslz"

Set objArgs=WScript.Arguments
Set fso=CreateObject("Scripting.FileSystemObject")
if objArgs.Count=0 Then
   MsgBox Show &vbCrLf&vbCrLf& Usage1 &vbCrLf& Usage2 &vbCrLf& Usage3, vbInformation, Usage4
   Wscript.Quit
end if
if not objArgs.Count < 3 Then
       Options="/y"
       ignoring = StrComp(objArgs(2), Options, vbTextCompare)
       if ignoring = 0 Then
          Sourcefile=objArgs(0)
          Getfile=objArgs(1)
          else
          MsgBox "文件数量或参数太多,拖拽批量处理请用 ANSI2Unicode.vbs     ", vbInformation, "程序意外终止"
          Wscript.Quit
       end if
       else
       if not objArgs.Count < 2 Then
          Sourcefile=objArgs(0)
          Getfile=objArgs(1)
          if fso.FileExists(objArgs(1)) then
             Choice = MsgBox ("待处理文件“"+Sourcefile+"” ==> 目标文件“"+Getfile+"”    "&vbCrLf&"目标文件已存在,是否改写现有文件?“"+objArgs(1)+"”    ",vbQuestion+vbYesNo,"是否改写")
             if Choice = vbYes Then
                Getfile=objArgs(1)
                else
                Wscript.Quit
             end if
          end if
          else
          Sourcefile=objArgs(0)
          Getfile=objArgs(0)
       end if
end if

Call CheckCode (Sourcefile)
Call WriteToFile(Getfile, ReadFile(Sourcefile, aCode), bCode)
Wscript.Quit

Function ReadFile (Sourcefile, CharSet)
    Dim Str
    Set stm = CreateObject("Adodb.Stream")
    stm.Type = 2
    stm.mode = 3
    stm.charset = CharSet
    stm.Open
    stm.loadfromfile Sourcefile
    Str = stm.readtext
    stm.Close
    Set stm = Nothing
    ReadFile = Str
End Function

Function WriteToFile (Getfile, Str, CharSet)
    Set stm = CreateObject("Adodb.Stream")
    stm.Type = 2
    stm.mode = 3
    stm.charset = CharSet
    stm.Open
    stm.WriteText Str
    stm.SaveToFile Getfile,2
    stm.flush
    stm.Close
    Set stm = Nothing
End Function

Function CheckCode (Sourcefile)
    Dim slz
    set slz = CreateObject("Adodb.Stream")
    slz.Type = 1
    slz.Mode = 3
    slz.Open
    slz.Position = 0
    slz.Loadfromfile Sourcefile
    Bin=slz.read(2)
    if AscB(MidB(Bin,1,1))=&HEF and AscB(MidB(Bin,2,1))=&HBB Then
       Codes="UTF-8"
       elseif AscB(MidB(Bin,1,1))=&HFF and AscB(MidB(Bin,2,1))=&HFE Then
              Codes="Unicode"
              else
              Codes="GB2312"
    end if
    if not aCode = Codes Then
           MsgBox "待处理文件 “"&Sourcefile&"”"&vbCrLf&"该文件原始编码不是"&aCode&",本脚本仅支持"&aCode&"到"&bCode&"的转换!    ",vbInformation,"错误终止"
           WScript.Quit
    end if
    slz.Close
    set slz = Nothing
End Function


需要注意的是:

1.通过TABLEDIFF生成的差异SQL文件是UTF-8格式的,但这种格式还不完全是标准的UTF-8,我经过分析发现这种格式是UTF-8的文件头,而内容却是GB2313的,如果通过以上脚本来直接换会发现脚本报错,说此文件不是UTF-8的文件,所以,要强制转换,还需要把以上代码中的

    if not aCode = Codes Then
           MsgBox "待处理文件 “"&Sourcefile&"”"&vbCrLf&"该文件原始编码不是"&aCode&",本脚本仅支持"&aCode&"到"&bCode&"的转换!    ",vbInformation,"错误终止"
           WScript.Quit
    end if

给注释掉,让他不检测文件版本,直接给按UTF-8给转换掉,这样才能通过OSQL等2000下的工具正确的执行。

2.如果把这种通过TABLEDIFF生成的差异SQL文件通过SQLCMD来执行就会出现很多码,幸好SQLCMD中有一个参数-f 通过-f i:65001这个参数就可以解决UTF-8差异数据文件执行的问题。

3.还有一点,就是SQL2005中的TABLEDIFF和SQL2008中的TABLEDIFF有差别,使用SQL2008版的TABLEDIFF不但性能差,而且生成的差异文件执行会报错,我发现的问题是对于NULL值,SQL2008版本中生成的脚本是N‘NULL’,而SQL2005中的TABLEDIFF中则生成的是NULL,所以推荐大家使用SQL2005中的TABLEDIFF文件。至于SQL2008中的TABLEDIFF会不会比SQL2005中的功能多,这点偶还没有发现,希望会有进步,但至少目前是发现了其不足。

4.最近验证了sqlserver2008r2中的tablediff工具,和sqlserver2008一样有问题,所以不得不使用sql2005中带的tablediff.exe

批量命令生成软件BatchCmdGen V3.2:功能与应用详解 本文还有配套的精品资源,点击获取 简介:BatchCmdGen V3.2是一款面向IT专业人士的高效批量命令生成工具,旨在简化和自动化命令行操作。此版本经过多次迭代优化,具有稳定的功能和优秀的用户体验。它能自定义执行一系列命令、支持批处理脚本的创建和编辑、允许参数化操作和错误处理、提供文件操作功能、集成其他系统工具或服务、拥有用户友好的图形界面、提供版本控制与更新功能、确保... 阅读详情

相关推荐

批处理智能代码生成

一个“输入中文生成批处理代码”的东西,尝试了下,觉得可行

.vbs批量把ansi编码变成utf-8编码

on error resume nextSet WshShell=WScript.CreateObject("Shell.Application")dirPath=WshShell.BrowseForFolder(0, "请选择路径", 0, "").items().item().pathif right(dirPath,1)<>"\" then dirPath=dir...

IT汪的博客 886

Ansi2Unicode

Ansi Unicode 的相互转换哦

12款AI代码生成工具,都很能打

Anania 是一个机器人数据分析师,可以通过简单、自然的英语对话来分析您的数据。连接数据源并以简单的英语提问,无需任何设置或配置。在幕后,Anania 正在使用一个 AI 系统,该系统将文本转换为 SQL 和 Python 代码并执行您的数据以获得答案。由 GPT-3 提供支持的机器人数据分析师。言简意赅:提供数据(数据源:excle,数据库等),可以通过提问的形式对数据分析网址:https://anania.ai/例如:对话提问:“有多少初创公司的估值超过 20 美元?AI生成一个后台。

m0_62587287的博客 2万+

BAT批处理命令生成器VB编写的代码

内容索引:VB源码,系统相关,BAT,批处理  VB编写的BAT批处理命令生成器,并附有命令解释器,源代码可顺利编译通过,进而有一些模块很有用,像批处理命令解释器、建立控制台的模块等,以后都用得上。   部分代码摘录:    Case 91    ErrNumToErrStr = "对象变量或With块变量未设置"    Case 92    ErrNumToErrStr = "For循环未初始化"    Case 93    ErrNumToErrStr = "无效的模式串"   

ENVI批处理与代码生成器

常用envi功能的扩展工具之一:ENVI批处理与代码生成器

文本文件编码格式转换

rem 出处: http://wenwen.soso.com/z/q62799393.htmrem 本程序可以转换小于10M之内的文件,亲自测试速度还可以 on error resume next Set WshShell=WScript.CreateObject("Shell.Application") 'dirPath=WshShell.BrowseForFolder(0, "请选择路径"...

weixin_33869377的博客 170

BAT批处理文件编辑器(生成工具) v1.1 beta.rar

BAT批处理文件编辑器,将除IF FOR以外所有的DOS语言全部收录在左边的目录树中,方便用户随时调用,免去又上百度的麻烦。   右边文本框可直接写DOS语言,最后点右下角的生成即可。   软件截图如下所示:

MSSQL 2005, 2008自带 表比较工具 tablediff.exe

<br />SQL Server 2005新增工具工具TABLEDIFF,用于比价两张表之间的差异。可以比较行数、架构、列;可将比较结果输出成T-SQL脚本或者输出到文件或者表中。<br />假定的SQL SERVER默认安装在c盘,那么这个工具位于“C:/Program Files/Microsoft SQL Server/90/COM/tablediff.exe”<br />C:/Program Files/Microsoft SQL Server/90/COM>tablediff.exe /?<br

php_boy的专栏 1991

腾讯、飞书等在线表格自动化编辑--python

在线文档自动化处理数据

qq_32828053的博客 2万+

别再瞎试了!用Python+正交设计,5分钟搞定你的多因素实验方案

本文介绍了如何利用Python和正交设计高效优化多因素实验方案。正交设计通过精心设计的正交表,用最少的实验次数覆盖所有因素的水平组合,显著提升实验效率。文章详细讲解了正交设计的核心优势、Python实现工具链、实验实施与数据分析方法,以及高级技巧与常见问题解决方案,帮助读者快速掌握这一强大的实验优化技术。

weixin_42526087的博客 334

使用TableDiff实用工具解决事务复制中的问题

  事务复制是数据同步中常用的一种手段,复制过程难免会遇到不少问题,就笔者遇到的问题而言,一般有两大类:一类是通过重新启动Distributor Agent即可解决的问题,另一类是因为Subscriber修改了数据,导致发布的数据有冲突,这类问题一般需要手工去修复。TableDiff是SQL Server 2005的一个命令行实用工具,该工具可以比较两个表,并且生成数据同步的脚本。借助这个工具

.NET博文收藏 438

别再只跑memtester了!嵌入式Linux内存压力测试,这5个参数和场景你试过吗?

本文深入探讨了嵌入式Linux内存压力测试的高级技巧,重点解析了memtester工具的5个关键参数和实战场景。通过物理地址测试、迭代控制、内存分配策略等调优方法,帮助开发者有效检测内存稳定性问题,适用于长期运行设备、特定故障重现等复杂场景,提升嵌入式系统可靠性。

weixin_30838873的博客 424

使用TableDiff工具比对时的需要注意的问题

     SQLServer2005引入了TableDiff工具用来对比两个表之间的结构以及数据差异,在使用中可能遇到一些错误如下:  错误1.原因:对比的源表没有主键的错误(在不使用-strict参数的情况下,目的表可以没有主键):错误描述:The replication table difference tool requires the comparison tables/vie

1539

RV1106G3的fastboot调试

本文详细描述了在幸狐的Luckfox Pico Ultra硬件平台上,使用官方SDK进行系统优化和YOLOv5s模型部署的过程。首先,硬件板卡使用幸狐的SDK进行EMMC非Fastboot配置时功能正常,但Fastboot配置编译失败,通过修改设备树中的ramdisk大小解决了编译问题,但运行时仍报错。幸狐提供的Fastboot烧录文件可正常运行,表明硬件支持Fastboot。随后,使用官方SDK版本rv1106_rv1103_240813进行编译和调试,发现EMMC Fastboot启动失败,通过修改U-

fzktongyong的博客 2360

别再手动备份了!用Python脚本批量导出华为/华三交换机配置(附完整代码)

本文详细介绍了如何使用Python脚本实现华为/华三交换机配置的自动化备份,大幅提升网络运维效率。通过paramiko库建立SSH连接,结合pandas处理设备清单,实现配置的批量导出与规范化存储,解决传统手动备份耗时易错的问题。

weixin_28737603的博客 449

tablediff工具实用

1. tablediff 是什么? tablediff 实用工具用于比较两个非收敛的表中的数据,它对于排除复制拓扑中的非收敛故障非常有用。  2. tablediff 用哪些用法? 1) . 在充当复制发布服务器的 Microsoft SQL Server 实例中的源表与充当复制订阅服务器的一个或多个 SQL Server 实例中的目标表之间进行逐行比较。 2) . 通过只比较行数和架构

萌萌的It人 www.itmmd.com 1549

广东电信兆能Z82盒子救砖记:手把手教你用U盘强刷HI3798MV100固件(附短接图)

本文详细介绍了广东电信兆能Z82盒子变砖后的救砖方法,重点讲解了使用U盘强刷HI3798MV100固件的全流程,包括诊断、准备工作、短接操作及刷机后的优化设置。特别针对m8233主板和8188无线方案的机型,提供了实用的短接图和操作技巧,帮助用户成功恢复设备。

weixin_30325487的博客 403

Sqlserver tablediff的简单使用

1. 先列举一下自己简单的比较语句 tablediff -sourceserver 10.24.160.73 -sourcedatabase cwbasemi70 -sourceschema lcmi709999 -sourcetable gspuser -destinationserver 10.24.160.94 -destinationdatabase cwbasemi70 -dest...

weixin_30867015的博客 213

CloudCompare 二次开发(41)——点云重建三维凸包并计算体积

本文介绍了如何结合PCL与CloudCompare实现点云三维凸包的构建与可视化。通过代码集成,在CloudCompare界面添加功能按钮,实现点云数据转换、凸包构建、体积计算以及可视化显示。具体步骤包括:1) 在UI中添加功能按钮;2) 将点云数据转换为PCL格式;3) 使用PCL的ConvexHull算法构建三维凸包;4) 计算并显示凸包体积;5) 将结果以点云和网格形式可视化显示。最终实现了点云凸包的自动构建与体积计算功能,为点云处理提供了实用工具。

点云侠的博客 193

资产会计 Transaction Type 与业务交易的 Post to Affiliated Company 不一致导致的 AAPO176:成因剖析与修复指引

本文解析了SAP资产会计中常见的"AAPO176"错误提示,指出当交易类型(TType)与业务交易(Business Transaction)的"关联公司过账"(Post to Affiliated Company)标志不一致时,系统会拒绝过账。作者详细说明了该标志的作用机制,并提供了四种解决方案:修正交易类型使用、匹配正确的业务交易、调整系统配置或建立映射关系。文章还通过实际案例展示了配置错误对集团合并报表的影响,并附带了用于检查配置一致性的ABAP脚本。该错误通常

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 398

“tablediff ”命令行工具

“tablediff ”命令行工具 “tablediff ”命令行工具   “tablediff ”工具支持你比较两个表的内容。它原先开发出来是为了复制场景,来帮助诊断差异的,但是它对其它情况也非常有用。当两个表的数据可能相同或者相似时,该工具可以帮助判断它们是否...

dida4700的博客 194

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

用Tablediff把表數據生成SQL腳本

use tempdbgo--表testif object_id('test') is not null drop table testcreate table Test(ID int identity(1,1) constraint PK_Test primary key,Name nv...

chenqunan3231的博客 70

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

巧用TableDiff

SQLServer 自带的TableDiff是用来比较表数据差异,并生产相应的脚本的工具,使用简单,还能生产差异脚本, 是非常有用的东东,尤其是在做同步链数据修复时,是很理想的工具;但是,很多使用的过朋友都抱怨,TableDiff 效率太差,上百万级别的数据表使用起来慢如蜗牛,有没有方法能加快TableDiff的效率呢?      其实TableDiff在很多时候效率还是不错的,和很多其他

学无止境 946

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SQL SERVER tablediff比较表是否一致工具

1. tablediff 是什么? tablediff 实用工具用于比较两个非收敛的表中的数据,它对于排除复制拓扑中的非收敛故障非常有用。  2. tablediff 用哪些用法? 1) . 在充当复制发布服务器的 Microsoft SQL Server 实例中的源表与充当复制订阅服务器的一个或多个 SQL Server 实例中的目标表之间进行逐行比较。 2) . 通过只比较行数和架构可

1963
上一篇: 最强的sql server中查看连接数据的查询语句
下一篇: ORACLE应用系统中对日志表的倒出备份操作的批处理
PDZSPDZS
博客等级 码龄18年 0粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值