翻譯|使用教程|編輯:莫成敏|2019-10-21 14:30:30.540|閱讀 339 次
概述: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@fc6vip.cn