您好,登錄后才能下訂單哦!
SQL Compare是一款比較和同步SQL Server數(shù)據(jù)庫結(jié)構(gòu)的工具?,F(xiàn)有超過150,000的數(shù)據(jù)庫管理員、開發(fā)人員和測試人員在使用它。當(dāng)測試本地?cái)?shù)據(jù)庫,暫存或激活遠(yuǎn)程服務(wù)器的數(shù)據(jù)庫時(shí),SQL Compare將分配數(shù)據(jù)庫的過程自動(dòng)化。
從另一個(gè)團(tuán)隊(duì)繼承數(shù)據(jù)庫?在格式化SQL的方式上更改了團(tuán)隊(duì)策略?當(dāng)您開發(fā)它時(shí),什么阻止您很好地格式化整個(gè)數(shù)據(jù)庫的代碼?手動(dòng)的過程可能需要比預(yù)期更長的時(shí)間。本篇文章演示了使用SQL Compare和SQL Prompt在單個(gè)操作中重新格式化整個(gè)數(shù)據(jù)庫的簡單3步方法。
首先,為開發(fā)數(shù)據(jù)庫生成最新的構(gòu)建腳本,包括表、代碼模塊等等。您可以使用SQL Prompt根據(jù)團(tuán)隊(duì)的標(biāo)準(zhǔn)重新格式化整個(gè)構(gòu)建腳本。到目前為止一切都很簡單,但接下來呢?
下一個(gè)任務(wù)是將這些格式更改保存到開發(fā)數(shù)據(jù)庫中。您需要設(shè)計(jì)一個(gè)遷移腳本,該腳本在執(zhí)行時(shí)會(huì)將每個(gè)代碼模塊、作為視圖的對(duì)象、表值函數(shù)、標(biāo)量函數(shù)、觸發(fā)器和過程,以應(yīng)用新的代碼格式。這樣,這些例程的新來源將保留在數(shù)據(jù)庫中。但是,由于復(fù)雜的對(duì)象間引用,這可能不像通過構(gòu)建腳本并將CREATE語句更改為ALTER那么簡單。當(dāng)您嘗試運(yùn)行這些ALTER命令時(shí),您可能會(huì)遇到麻煩。
例如,除了在視圖、另一個(gè)函數(shù)或過程中引用之外,函數(shù)也可以綁定到表列上的計(jì)算列、默認(rèn)約束或檢查約束。如果您嘗試以這種方式更改正在使用的函數(shù),您將收到錯(cuò)誤:
Cannot?ALTER?'<name?of?referenced?object>'?because?it?is?being?referenced?by?object?'<Name?of?referencing?object>'.
為避免這種情況,您必須在更改函數(shù)之前刪除引用和約束,然后替換它們。如果一個(gè)函數(shù)被引用很多,這使得改變函數(shù)相當(dāng)棘手。此外,如果WITH SCHEMABINDING正在使用,將強(qiáng)制執(zhí)行依賴項(xiàng)。這意味著在更改之前必須更改所有下游例程以刪除模式綁定??偠灾赡軙?huì)變得復(fù)雜。
成功執(zhí)行了遷移腳本之后,您還需要在源代碼管理中更新表和代碼模塊中的各個(gè)對(duì)象腳本,以反映數(shù)據(jù)庫的新格式化版本。當(dāng)然,源代碼管理中的規(guī)范源代碼是唯一可以保存CREATE TABLE語句格式以及所有注釋的地方。
幸運(yùn)的是,一旦您生成了構(gòu)建腳本,并使用SQL Prompt對(duì)其進(jìn)行了格式化,SQL Compare可以為您完成剩下的這項(xiàng)艱苦工作。
步驟1:在SSMS中生成并格式化構(gòu)建腳本
第一項(xiàng)任務(wù)是生成最新的數(shù)據(jù)庫構(gòu)建腳本。最簡單的方法是在沙箱中使用SSMS?Generate Scripts向?qū)?,在開發(fā)數(shù)據(jù)庫的最新副本上。在SSMS對(duì)象資源管理器窗格中,右鍵單擊要進(jìn)行美化的源代碼的開發(fā)數(shù)據(jù)庫。然后導(dǎo)航任務(wù)?|?生成腳本...以啟動(dòng)向?qū)А?/p>
我們將為新數(shù)據(jù)庫生成所有內(nèi)容,并將其放在新的查詢窗口中。
向?qū)У钠溆嗖糠质遣谎远鞯摹D鷮⒃谛碌牟樵兇翱谥姓业綐?gòu)建腳本。
我們不想重建我們的開發(fā)數(shù)據(jù)庫,因此,在構(gòu)建腳本中,我們需要將對(duì)數(shù)據(jù)庫的所有引用更改為新數(shù)據(jù)庫的名稱。這些引用將被SSMS括起來,因此您應(yīng)該在全局搜索中包含這些括號(hào),并在數(shù)據(jù)庫名稱上替換表達(dá)式,無論它們在何處引用。因此,如果您的數(shù)據(jù)庫名為Snibbo,并且您希望構(gòu)建腳本創(chuàng)建NewSnibbo,則找到[Snibbo]并替換為[NewSnibbo]。通過這樣做,即使“find”字符串在注釋、字符串或其他符號(hào)的其他地方使用,操作也會(huì)更加安全。因?yàn)槌悄褂脭?shù)據(jù)庫名稱作為數(shù)據(jù)庫對(duì)象的名稱,否則它們將不帶括號(hào)。即使您不明智地調(diào)用數(shù)據(jù)庫[Select],如果將其更改為[SelectCopy]?,也不會(huì)損害您的查詢。
腳本開頭的CREATE DATABASE語句需要更改為最簡單的...
CREATE?DATABASE?<nameOfNewDatabase>
然后,您應(yīng)該可以通過單擊菜單項(xiàng)SQL Prompt > Format SQL輕松地重新格式化此腳本。(或按Ctrl K Ctrl Y)。由于您可能已選擇刪除不必要的方括號(hào),因此最好先更改數(shù)據(jù)庫名稱。
步驟2:使用SQL Compare自動(dòng)生成部署腳本
下一個(gè)任務(wù)是使SQL Compare創(chuàng)建一個(gè)部署腳本,該腳本可以改變開發(fā)數(shù)據(jù)庫中的每個(gè)代碼模塊以反映新的格式。
此時(shí)您有兩種選擇:
將重新格式化的構(gòu)建腳本保存到文件中,并將其與當(dāng)前數(shù)據(jù)庫進(jìn)行比較,或
使用重新格式化的構(gòu)建腳本來創(chuàng)建新數(shù)據(jù)庫并從中進(jìn)行同步。
我將演示第二種技術(shù),因此我們需要使用構(gòu)建腳本臨時(shí)創(chuàng)建一個(gè)新版本的數(shù)據(jù)庫,該版本將在其模塊中包含所有重新格式化的代碼。
在這個(gè)例子中,使用Sandbox開發(fā)服務(wù)器,我已經(jīng)使用了一個(gè)名為PhilsScripts的數(shù)據(jù)庫,其中包含大量的診斷腳本。已經(jīng)生成了一個(gè)構(gòu)建腳本,對(duì)其進(jìn)行了格式化,并使用該構(gòu)建腳本在名為BetterPhilsScripts的服務(wù)器上創(chuàng)建了一個(gè)新數(shù)據(jù)庫。然后執(zhí)行SQL Compare并指定新格式化的BetterPhilsScripts作為源,并將PhilsScripts指定為目標(biāo)。
我們比較兩者并發(fā)現(xiàn)SQL Compare已檢測到SQL Prompt所做的所有更改。然后,我們檢查部署腳本,當(dāng)我們滿意時(shí),我們會(huì)部署更改。
步驟3:更新源代碼管理
使用SQL Compare,您可以將數(shù)據(jù)庫保存在腳本目錄中,或更新源控制系統(tǒng)的現(xiàn)有腳本目錄。這會(huì)將每個(gè)對(duì)象保存在自己的文件中,但也可以維護(hù)構(gòu)建腳本。我使用PowerShell腳本來執(zhí)行此操作;當(dāng)我在開發(fā)數(shù)據(jù)庫中一次更改多個(gè)對(duì)象時(shí),它會(huì)定期保存對(duì)象腳本,然后我可以使用Github Desktop或Gmaster通過本地存儲(chǔ)庫進(jìn)行檢查。
整理
因此,通過SQL Prompt和SQL Compare的組合,不僅可以重新格式化整個(gè)數(shù)據(jù)庫或模式的例程,還可以更新單個(gè)源文件或構(gòu)建腳本以進(jìn)行源代碼控制。如果您使用“遷移”方法進(jìn)行數(shù)據(jù)庫開發(fā),則還可以將SQL Compare同步腳本保存為源代碼控制,作為遷移腳本的基礎(chǔ)。這一切都使得重新格式化SQL代碼變得更加愉快,而不僅僅是一件苦差事。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。