SQL Server View、Function 及 Stored Procedure 定義之快速備份
我有個快速備份 SQL 資料庫 View、Function 以及 Stored Procedure 定義的需求,顯然球又飛進 PowerShell 的守備範圍。
SQL Server 有個 sys.sql_modules 資料表,包含 View、Function、Stored Procedure、Trigger、Default... 等物件定義內容,其中 definition nvarchar(max) 欄位存有定義該物件的 SQL 指令。要查詢物件名稱、類別、是否為系統物件... 等資訊則需 JOIN sys.objects。(註:在網路爬文會看到性質相似的 sysobjects、syscomments 資料表,至今雖然仍可使用,但他們是基於向前相容保留的,未來會被移除,故建議改用新版資料表。新舊系統資料表對映表在這裡)
為了測試,在 SQL LocalDB 隨便建了一個 View 一個 Function 及一個 Procedure:

核心查詢實測如下,透過 type in ('V','FN','IF','P') 限定 View/Function/Procedure,is_ms_shipped = 0 則用以排除 SQL 內建物件。
透過以上述查詢,CREATE 指令輕鬆到手:

接下來,寫一小段 PowerShell 執行查詢,讀取 View、Function、Procedure 的 CREATE Script,以物件名稱作為檔案名,分別儲存到 Views、Funcs、SPs 子資料就大功告成。
測試成功。

Last updated