Pages

VS DataBase Project

Aug 11, 2014

image

 

Visual Studio 中約 2007 年就有提供資料庫專案,由於資料庫結構設計我都是依賴 Sybase PowerDesigner,所以一直不瞭解或說是找不到 VS 資料庫專案可以用在甚麼地方。不過近期由於調整開發工具與佈署流程時,卻發現它可以幫上不忙,本文是在我的工作環境中使用的情境。

 

資料庫設計與開發

資料庫設計工具我是選擇 Sybase PowerDesigner,透過它產生建立資料庫相對應的 T-SQL 語法,僅在測試區資料庫建立資料表。

後續會直接用 SQL Server Management Studio 撰寫預存程序、函式、觸發等,主要是 SSMS 的 Intellisence 與查詢效能相關工具很完整。

以上,其實也都可以在 VS 資料庫專案中進行的。

 

 

移轉部署

接著,才是我用到 VS 資料庫專案的部分。

使用資料庫專案中 [Schema Compare] 功能,比對開發資料庫與測試區(目的)資料庫的差異部分,產生更新的 T-SQL 語法。

 

建立 SQL Server Database Project 進行資料庫比對,操作步驟 點此連結。建立比對後會產生 *.scmp 檔案,不過預設是不會加入 VS 專案中,可以手動將其加入專案,日後開啟專案即可重複執行比對動作。

 

取得所產生的 T-SQL 語法,直接去執行是無效的,不會異動任何資料結構的,原因是語法中有段  SET NOEXEC ON; 所致。

/*
Detect SQLCMD mode and disable script execution if SQLCMD mode is not supported.
To re-enable the script after enabling SQLCMD mode, execute the following:
SET NOEXEC OFF;
*/
:setvar __IsSqlCmdEnabled "True"
GO
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
BEGIN
PRINT N'SQLCMD mode must be enabled to successfully execute this script.';
SET NOEXEC ON;
END


GO
USE [$(DatabaseName)];


請從此下一行起執行,另外後面還有一行

USE [$(DatabaseName)];

也忽略它不要執行。

 

 

 

版本控管

使用 [Import] 功能將開發資料庫匯入專案中,所有所有資料庫的物件或函式會分別產生 T-SQL 語法儲存於個別檔案,再將整個專案簽入版本控制 (如: VS online) 中。

image

 

匯入完成後,會新建立 Functions, Stored Procedures, Tables, Views 等目錄中,其中資料表的觸發會與建立資料表語法合併在同一個檔案中。

 

日後,也可以透過 [Schema Compare] 功能做資料庫與專案內的檔案做比較,比對後直接更新專案內的檔案,再執行簽入版控。