提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:莫成敏|2019-10-21 14:30:30.540|阅读 299 次
概述:SQL Compar是一款比较和同步SQL Server数据库结构的工具。本文演示了如何使用XML argfiles将参数传递给SQL Compare,从而消除了每个目标数据库所需的许多修改数据库模式比较和部署过程所涉及的繁琐脚本教程的上半部分内容~
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
SQL Compare是一款比较和同步SQL Server数据库结构的工具。现有超过150,000的数据库管理员、开发人员和测试人员在使用它。当测试本地数据库,暂存或激活远程服务器的数据库时,SQL Compare将分配数据库的过程自动化。
本文演示了如何使用XML argfiles将参数传递给SQL Compare,从而消除了每个目标数据库所需的许多修改数据库模式比较和部署过程所涉及的繁琐脚本。
有很多方法可以使用PowerShell自动执行需要执行SQL Compare的许多常规开发工作。您选择的方法取决于您的要求。本文旨在指出当您从命令行界面(CLI)运行XML时,使用XML将详细指令传递给SQL Compare的一些优点。教程内容较多,本文为上半部分内容~
将参数传递给SQL Compare CLI
SQL Compare CLI允许您从XML参数文件(argfile)或使用项目文件传递参数,以及在命令行末尾使用开关的更常用方法。如果您需要大量参数但无法从GUI生成项目文件,那么这个功能很有用。
使用XML argfile传递参数的原因有很多。自动生成项目文件不是一个好主意,而XML argfile是受支持的。这意味着您可以从头开始为每个任务创建XML argfile,并且可以按计划执行所有任务。您还可以使用SQL Compare有时需要的所有许多细节来执行一般任务,而只需填写更改的细节(例如服务器、数据库或凭据),而所有其他选项、开关等保持不变。我在使用Linux或Windows上的SQL Compare命令行比较和部署SQL Server数据库,并给出了所有这些说明。
我们可以总结这些方法的一些优点和缺点。
方法 | 好处 | 缺点 |
项目文件 |
|
|
XML文件 |
|
|
切换命令尾部 |
|
|
'Splatted'(在PowerShell中) |
|
|
使用PowerShell的XML方法入门
当重复很多或使用大量命令行选项时,使用XML argfile为命令行界面指定参数特别有用。这是用于SQL比较的简单XML参数文件(argfile):
<?xml version="1.0"?> <commandline> <database1>FirstDatabase</database1> <server1>SecondHostname</server1> <database2>SecondDatabase</database2> <server2>SecondHostname</server2> </commandline>
这里是一个更复杂的例子:
<?xml version="1.0" encoding="UTF-8"?> <commandline> <sourcecontrol1 /> <version1>HEAD</version1> <server2>TargetDBServer</server2> <database2>TargetDB</database2> <scriptsfolderxml>MyScriptFolderXml.sfx</scriptsfolderxml> <migrationfolderxml>MyMigrationFolderXml.mfx</migrationfolderxml> <include>Assembly</include> <include>FullTextCatalog</include> <include>Function</include> <include>Schema</include> <include>StoredProcedure</include> <include>Table</include> <include>View</include> <include>identical</include> <Synchronize /> </commandline>
将所有这些设置保存在XML argfile中之后,您可以从Bash、PowerShell或命令提示符执行它:
sqlcompare /Argfile:MyXMLfilename.xml
如果执行此操作,则可以添加的唯一其他命令行开关为/verbose/quiet。其余的必须在XML argfile中。这给我们带来了一些敏感信息的问题,例如密码,我们无法将其存储在XML argfile中,因此无法将其分别传递给CLI。稍后,我将向您展示如何解决此问题,但是如果您使用命令提示符或Bash,这仍然是一个问题。
指定开关
开关可以包含其开关名称(长或短形式)作为名称,以及其值作为XML值。如果您有多个值(例如/options开关中允许的值),则可以将它们用逗号分隔:
sqlcompare /Argfile:MyXMLfilename.xml
创建表示开关的更复杂的argfile键的最简单方法是检出等效的SQL Compare项目文件。我不知道为什么两者之间的XML结构和键有很大的不同,因为它们几乎并行工作。也就是说,大多数有趣且复杂的键都是相同的,您可以在它们之间剪切和粘贴。这使您可以在GUI中进行繁重的工作,保存项目文件,并挑选出代表所需开关的所需位。
从hash表中的参数列表创建Argfiles
对我而言,在PowerShell中创建这些XML argfile的最简单方法是将参数放入hash表中,并将其传递给帮助函数以将其转换为正确的XML格式。它消除了手工制作XML的许多烦人的错误。
<# Unless you like writing XML, the easiest way of creating these files in PowerShell is probably this. We just put our parameters into a hash table and pass it to a function. #> $MyParameters = @{ 'Database1' = 'Sigrid'; 'Server1' = 'MyFirstServer'; 'Database2' = 'Sigrid' 'Server2' = 'MySecondServer'; 'userName1' = 'MyUsername1'; 'password1' = 'MyPassword1'; 'userName2' = 'MyUsername2'; 'password2' = 'MyPassword2'; 'report' = "${env:temp}\MyReport.html"; 'force' = $null; 'reportType' = 'HTML'; 'loglevel' = 'Warning'; 'options' = 'default' } # just a helper function to translate the hash table to the XML format expected # neither of the built-in cmdlets can cut it because they wrap the hash table up Function SaveHashTableAsSQLCompareXML([hashtable]$TheHashTableParameters,[string]$WhereToStoreIt) { $xmlDoc = [System.Xml.XmlDocument]'<?xml version="1.0"?>'; $commandline = $xmlDoc.AppendChild($xmlDoc.CreateElement('commandline')); $TheHashTableParameters.GetEnumerator() | foreach { $Element = $commandline.AppendChild($xmlDoc.CreateElement($_.Name)); if ($_.Value -ne $null) # if it is a switch with a parameter { $textNode = $Element.AppendChild($xmlDoc.CreateTextNode($_.Value)); } } $xmlDoc.Save("$WhereToStoreIt"); #save it to the user temp area } SaveHashTableAsSQLCompareXML $MyParameters "${$env:temp}\Paramfile.xml" sqlCompare /Argfile:"${env:temp}\Paramfile.xml" >"${env:temp}\summary.txt" start "${env:temp}\MyReport.html" #display the HTML result report
用于常规比较任务的简单Argfiles
这是一些用于各种任务的argfile示例。对于未加密的密码,读者会有些不解,但稍后再解决。
编写新版本的脚本
<?xml version="1.0"?> <commandline> <!-- Script out a new version of the script folder --> <database1>Sigrid</database1> <server1>MyFirstServer</server1> <userName1>MyUsername</userName1> <password1>MyP@55w0rd</password1> <makescripts>MyPathTo\Tryout</makescripts> <force/> </commandline>
生成一个构建脚本
<?xml version="1.0"?> <commandline> <!-- generate a build script --> <database1>Sigrid</database1> <server1>MyFirstServer</server1> <userName1>MyUsername</userName1> <password1>MyP@55w0rd</password1> <empty2/> <scriptFile>MyPathTo\MyScriptFile.sql</scriptFile> <force/> </commandline>
报告两个数据库之间的任何差异
<?xml version="1.0"?> <commandline> <!--report on any differences between two databases --> <loglevel>Warning</loglevel> <password1>MyP@55w0rd</password1> <force /> <Server2>MyOtherServer</Server2> <password2>MyP@55w0rd</password2> <userName2>MyUsername</userName2> <options>default</options> <Server1>MyFirstServer</Server1> <reportType>HTML</reportType> <userName1>MyUsername</userName1> <Database2>Sigrid</Database2> <Database1>Sigrid</Database1> <report>MyPathTo\MyReport.html</report> </commandline>
编写并报告两个数据库之间的差异
<?xml version="1.0"?> <commandline> <!-- Script out, and report on, the differences between two databases --> <loglevel>Warning</loglevel> <password1>MyP@55w0rd</password1> <force /> <Server2>MyOtherServer</Server2> <password2>MyP@55w0rd</password2> <userName2>MyUsername</userName2> <options>default</options> <Server1>MyFirstServer</Server1> <reportType>HTML</reportType> <userName1>MyUsername</userName1> <database2>Sigrid</database2> <database1>Sigrid</database1> <exclude>Identical</exclude> <scriptfile>MyPathTo\MyDatabaseBuild.sql</scriptfile> <report>MyPathTo\MyReport.html</report> </commandline>
从数据库创建快照
<?xml version="1.0"?> <commandline> <!-- make a snapshot of a database --> <Server1>MyFirstServer</Server1> <database1>Sigrid</database1> <userName1>MyUsername</userName1> <password1>MyP@55w0rd</password1> <loglevel>Warning</loglevel> <force /> <makesnapshot>MyPathTo\MyDatabase.snp</makesnapshot> <options>default</options> </commandline>
本教程内容较多,敬请期待后半部分内容~感兴趣的朋友可以下载SQL Compare免费版尝试一下~
相关内容推荐:
SQL Compare教程:如何在一个操作中重新格式化数据库
SQL Compare教程:使用SQL Compare来维护对象级源代码控制(下)
SQL Compare教程:使用SQL Compare来维护对象级源代码控制(上)
想要购买SQL Compare正版授权,或了解更多产品信息请点击
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢