︿
Top

2016年1月8日 星期五

SQL Server 資料庫版本控管 (Part 2) : Schema Compare


延續前一篇的內容, 本篇將就 SSDT 提供的 SQL Server 資料庫專案 進行說明.



資料庫環境說明

延續前一篇最後一版的狀況, 亦即:
(1) 加入了 usp_get_all_emps 這個 stored procedure;
(2) 修改了 DeptName 及 EmpName 的欄位長度


應用程式說明

本範例共含有2個專案, 一個是 Console Application, 一個是 SQL Server 資料庫專案; 同時加入 Visual Studio Online 進行版控.


建立 Console Application 專案



加入 SQL Server 資料庫專案

C:\Users\JASPER~1\AppData\Local\Temp\SNAGHTML16c8990.PNG


由下圖看來, 似乎是個空專案; 其實, 必須匯入, 才會有內容啦
C:\Users\JASPER~1\AppData\Local\Temp\SNAGHTML170e6dc.PNG
C:\Users\JASPER~1\AppData\Local\Temp\SNAGHTML171b966.PNG


加入至 Visual Studio Online 版控

將 Visual Studio 2013 的方案, 加入到前篇建立的 TEAM 專案



C:\Users\JASPER~1\AppData\Local\Temp\SNAGHTML86284a.PNG
C:\Users\JASPER~1\AppData\Local\Temp\SNAGHTML175dbf4.PNG


檢視版更記錄





開始進行異動

CASE 1: 加入 Stored Procedure

加入 usp_get_emps_by_detpid 這個 stored procedure, 以取得某個部門的員工資料


注意:
這裡的加入預存程序, 係加在 Visual Studio 2013 的專案裡, 並沒有反映到資料庫; 必須要將本專案作為來源, 資料庫作為目標, 進行更新.


C:\Users\JASPER~1\AppData\Local\Temp\SNAGHTML180ccc8.PNG


在編寫的過程中, intellisense 就出現了


最後的內容
CREATE PROCEDURE [dbo].[usp_get_emps_by_deptid]
   @pi_deptid int = 1
AS
   SELECT E.*, D.DeptName
     FROM Emp E Left Join Dept D ON ( E.DeptId = D.DeptId )
    WHERE E.DeptId = @pi_deptid;


RETURN 0;


CASE 2: 修改 Table Layout

將 DeptName 及 EmpName 由 nvarchar(20) 改為 nvarchar(30)


SQL Server資料庫專案 與 開發環境資料庫同步

檢查目前 SQL Server 資料庫專案的正確性



看一下 建置方案 或 重建方案 的結果


進行比較



下圖顯示了有 3 個地方有差異, 可以直接 [更新] 或 [產生指令碼]


這裡直接採用 [更新] 的方式




將單元測試後的版本, 簽入至 Visual Studio Online

單元測試完成後, 將本版次簽入到 Visual Studio Online






總結

採用 SQL Server 資料庫專案的好處, 與前一篇相比較 至少有2點:
(1) 有 intellisense
(2) 可以透過建置或重建, 先檢查是否有語法上的問題.


本系列文章僅就資料庫版控作一個簡單的說明, 還有一些深入的議題可以探討, 例如: (1) Data Tier Application, (2) 如何利用 SQL Server 本身提供的版控機制. 各位可以參考Will 保哥在 Slide Share 及 Channel 9 分享的 Slides影片.




參考文件


沒有留言:

張貼留言