在單個操作中重新格式化整個數據庫只需簡單3步!

SQL Compare是一款比較和同步SQL Server數據庫結構的工具。現有超過150,000的數據庫管理員、開發人員和測試人員在使用它。當測試本地數據庫,暫存或激活遠程服務器的數據庫時,SQL Compare將分配數據庫的過程自動化。

從另一個團隊繼承數據庫?在格式化SQL的方式上更改了團隊策略?當您開發它時,什麼阻止您很好地格式化整個數據庫的代碼?手動的過程可能需要比預期更長的時間。本篇文章演示了使用SQL Compare和SQL Prompt在單個操作中重新格式化整個數據庫的簡單3步方法。

首先,爲開發數據庫生成最新的構建腳本,包括表、代碼模塊等等。您可以使用SQL Prompt根據團隊的標準重新格式化整個構建腳本。到目前爲止一切都很簡單,但接下來呢?

下一個任務是將這些格式更改保存到開發數據庫中。您需要設計一個遷移腳本,該腳本在執行時會將每個代碼模塊、作爲視圖的對象、表值函數、標量函數、觸發器和過程,以應用新的代碼格式。這樣,這些例程的新來源將保留在數據庫中。但是,由於複雜的對象間引用,這可能不像通過構建腳本並將CREATE語句更改爲ALTER那麼簡單。當您嘗試運行這些ALTER命令時,您可能會遇到麻煩。

例如,除了在視圖、另一個函數或過程中引用之外,函數也可以綁定到表列上的計算列、默認約束或檢查約束。如果您嘗試以這種方式更改正在使用的函數,您將收到錯誤:

Cannot ALTER '<name of referenced object>' because it is being referenced by object '<Name of referencing object>'.

爲避免這種情況,您必須在更改函數之前刪除引用和約束,然後替換它們。如果一個函數被引用很多,這使得改變函數相當棘手。此外,如果WITH SCHEMABINDING正在使用,將強制執行依賴項。這意味着在更改之前必須更改所有下游例程以刪除模式綁定。總而言之,它可能會變得複雜。

成功執行了遷移腳本之後,您還需要在源代碼管理中更新表和代碼模塊中的各個對象腳本,以反映數據庫的新格式化版本。當然,源代碼管理中的規範源代碼是唯一可以保存CREATE TABLE語句格式以及所有註釋的地方。

幸運的是,一旦您生成了構建腳本,並使用SQL Prompt對其進行了格式化,SQL Compare可以爲您完成剩下的這項艱苦工作。

步驟1:在SSMS中生成並格式化構建腳本

第一項任務是生成最新的數據庫構建腳本。最簡單的方法是在沙箱中使用SSMS Generate Scripts嚮導,在開發數據庫的最新副本上。在SSMS對象資源管理器窗格中,右鍵單擊要進行美化的源代碼的開發數據庫。然後導航任務 | 生成腳本...以啓動向導。

25word-image-34.png

我們將爲新數據庫生成所有內容,並將其放在新的查詢窗口中。

26word-image-35.png

嚮導的其餘部分是不言而喻的。您將在新的查詢窗口中找到構建腳本。

我們不想重建我們的開發數據庫,因此,在構建腳本中,我們需要將對數據庫的所有引用更改爲新數據庫的名稱。這些引用將被SSMS括起來,因此您應該在全局搜索中包含這些括號,並在數據庫名稱上替換表達式,無論它們在何處引用。因此,如果您的數據庫名爲Snibbo,並且您希望構建腳本創建NewSnibbo,則找到[Snibbo]並替換爲[NewSnibbo]。通過這樣做,即使“find”字符串在註釋、字符串或其他符號的其他地方使用,操作也會更加安全。因爲除非您使用數據庫名稱作爲數據庫對象的名稱,否則它們將不帶括號。即使您不明智地調用數據庫[Select],如果將其更改爲[SelectCopy] ,也不會損害您的查詢。

腳本開頭的CREATE DATABASE語句需要更改爲最簡單的...

CREATE DATABASE <nameOfNewDatabase>

然後,您應該可以通過單擊菜單項SQL Prompt > Format SQL輕鬆地重新格式化此腳本。(或按Ctrl K Ctrl Y)。由於您可能已選擇刪除不必要的方括號,因此最好先更改數據庫名稱。

步驟2:使用SQL Compare自動生成部署腳本

下一個任務是使SQL Compare創建一個部署腳本,該腳本可以改變開發數據庫中的每個代碼模塊以反映新的格式。

此時您有兩種選擇:

  • 將重新格式化的構建腳本保存到文件中,並將其與當前數據庫進行比較,或

  • 使用重新格式化的構建腳本來創建新數據庫並從中進行同步。

我將演示第二種技術,因此我們需要使用構建腳本臨時創建一個新版本的數據庫,該版本將在其模塊中包含所有重新格式化的代碼。

在這個例子中,使用Sandbox開發服務器,我已經使用了一個名爲PhilsScripts的數據庫,其中包含大量的診斷腳本。已經生成了一個構建腳本,對其進行了格式化,並使用該構建腳本在名爲BetterPhilsScripts的服務器上創建了一個新數據庫。然後執行SQL Compare並指定新格式化的BetterPhilsScripts作爲源,並將PhilsScripts指定爲目標。

27word-image-36(1).jpg

我們比較兩者並發現SQL Compare已檢測到SQL Prompt所做的所有更改。然後,我們檢查部署腳本,當我們滿意時,我們會部署更改。

28word-image-37(1).jpg

步驟3:更新源代碼管理

使用SQL Compare,您可以將數據庫保存在腳本目錄中,或更新源控制系統的現有腳本目錄。這會將每個對象保存在自己的文件中,但也可以維護構建腳本。我使用PowerShell腳本來執行此操作;當我在開發數據庫中一次更改多個對象時,它會定期保存對象腳本,然後我可以使用Github Desktop或Gmaster通過本地存儲庫進行檢查。

整理

因此,通過SQL Prompt和SQL Compare的組合,不僅可以重新格式化整個數據庫或模式的例程,還可以更新單個源文件或構建腳本以進行源代碼控制。如果您使用“遷移”方法進行數據庫開發,則還可以將SQL Compare同步腳本保存爲源代碼控制,作爲遷移腳本的基礎。這一切都使得重新格式化SQL代碼變得更加愉快,而不僅僅是一件苦差事。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章