SQL Compare使用教程:在Argfiles中使用SQL Compare命令行

SQL Compare是一款比较和同步SQL Server数据库结构的工具。现有超过150,000的数据库管理员、开发人员和测试人员在使用它。当测试本地数据库,暂存或激活远程服务器的数据库时,SQL Compare将分配数据库的过程自动化。

点击下载SQL Compare试用版

Phil Factor演示了如何使用XML argfiles将参数传递给SQL Compare,从而消除了每个目标数据库所需的许多修改数据库模式比较和部署过程所涉及的繁琐脚本。

有很多方法可以使用PowerShell自动执行需要执行SQL Compare的许多常规开发工作。您选择的方法取决于您的要求。本文旨在指出从命令行界面(CLI)运行XML时,使用XML将详细指令传递给SQL Compare的一些优点。

在这里插入图片描述

命令行许可

需要在多台计算机上安装SQL比较命令行的自动化程序需要Redgate Deploy或SQL Toolbelt许可证。有关完整的详细信息,请参阅文档的“更改分发的命令行”页面。

将参数传递给SQL Compare CLI

SQL Compare CLI允许您从XML参数文件(argfile)或使用项目文件传递参数,以及在命令行尾部使用开关的更常用方法。如果您需要大量参数但无法从GUI生成项目文件,则此功能很有用。

使用XML argfile传递参数的原因有很多。自动生成项目文件不是一个好主意,而支持XML argfile。这意味着您可以从头开始为每个任务创建XML argfile,并可以按计划执行所有任务。您还可以使用SQL Compare有时需要的所有许多细节来执行一般任务,而只需填写更改的细节,例如服务器,数据库或凭据,而所有其他选项,开关等保持不变。我在使用Linux或Windows上的SQL Compare命令行比较和部署SQL Server数据库的文章中给出了所有这些说明。

我们可以总结这些方法的一些优点和缺点。

在这里插入图片描述

使用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开关中允许的值),则可以将它们用逗号分隔:

<options> n,oc,t </ options>

创建表示开关的更复杂的argfile键的最简单方法是检出等效的SQL Compare项目文件。我不知道为什么两者之间的XML结构和键会有很大的不同,因为它们几乎是并行的。也就是说,大多数有趣且复杂的键都是相同的,您可以在它们之间剪切和粘贴。这使您可以在GUI中进行繁重的工作,保存项目文件,并挑选出代表所需开关的所需位。

从哈希表中的参数列表创建Argfiles

对我而言,在PowerShell中创建这些XML argfile的最简单方法是将参数放入哈希表中,并将其传递给帮助函数以将其转换为正确的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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值