開發人應該學的,用Visual Studio開發SQL ( SQL Server Data Tools )
2012/4/4 從SQL Server Developer Tools,Codename “Juneau” CTP3版本更新成SQL Server Data Tools – DataBase Project
記得這篇的撰寫,是因為TechDays 2011最後一場太棒了,而撰寫的記憶筆記,事到如今也已經快要過一年了,記得那場的主題是"開發人應該懂的SQL Server進階開發 - 活用Visual Studio 2010”,講師是高光弘老師,但到現在,我還是到處都找不到他的Blog,所以只能給恆益的連結,本人比較帥喔XDD。
回歸正題,我覺得這是非常實務且好用的主題,剛好之前的一篇文章安裝SQL Server Data Tools - DataBase Projects也還沒寫後續應用,又剛好的那次的課程剛好的補齊了一些之前沒看到忽略掉的,所以很多很多的剛好,就成了這次想要分享給大家的題目。
現在大家是怎麼寫SQL的!?我想可能會有很多種回答,我聽過最酷的回答是"不用寫,因為是DBA的工作",不過,就算是這樣,還是可以稍微繼續往下看;我們以前開發是使用SQL Server Management Studio來做撰寫SQL的工作,所以碰到的第一個問題(不便)就是都要在視窗間切來切去,不過好在後來我和IT部門A了一個螢幕,所以雙螢幕就解決了這個問題。(然後工作量就加倍,因為雙螢幕,就要有雙產能…= =|| ),接下來,開始導入版控,程式碼都開開心心的進入版控了,但是SQL語法,還是像孤兒一樣,然後動到一個東西掛掉,就四處找備份…,其次也沒有支援Intellsense( 記得2008版本的SQL就有開始支援 ),然後正式機與測試機的SQL又不同,等等…,我想,大家應該都有類似的經歷吧( 那位由DBA寫的不算… ),所以以下列出幾個目前我們常用到的問題。
- 開發環境沒有統一,且需要學習不同工具。
- 版本控制不易處理。
- 重構能力不足。
- 沒辦法做到差異比較。
當然,零零總總還有許多沒列出來;而這些的問題,微軟幫我們解決了… ( 這台詞用了好幾年了 )
那要怎麼做到呢?技術的主軸在於離線開發,此工具會在正式資料庫的Schema複製一份到本機的記憶體裡面,而未來新增欄位、修改欄位、刪除欄位都在本機端執行,而不會立即的影響到正式機端,如確定完成,可以再發佈回正式機去做修改,接下來,我們先把資料拉回來吧。
首先我們打開Visual Studio,可以看見SQL Server物件總管,如果找不到的人可以去檢視裡面找,如果還是找不到的人,你可能沒有安裝SQL Server Data Tools..,我們可以按下如下圖的加入Server按鈕加上伺服器。
然後就會出現以下畫面,我們這一步要做的是先連接到正式的資料庫,這樣才有辦法從正式的資料庫裏面拉Schema回來進行本機上的模型建置。
然後左邊就會出現剛剛加入的SQL Server,Cool!。接下來,針對想要處理的資料庫,瞄準後按下滑鼠右鍵,並選擇,建立新專案。
其實,在Visual Studio裡面開發SQL,也是利用專案的方式去進行,也因為使用專案的方式,未來無論是版控,或是檔案的控管就會更加的方便;設定完無誤後,就按下啟動吧
接下來,會出現匯入資料庫的視窗,但老實說,這邊命名也覺得怪怪的,因該將資料庫的Schema轉成專案,怎麼會寫成匯入資料庫哩- -??
完成後,我們就可以從方案總管看到,原本是ClientBasic的Table,已經幫忙轉成SQL了,而且也幫我們建立了一個DB Project – TestDB。
首先我們點選右邊方案總管的視窗,我們選擇ClientBasic.sql,然後就會出現左邊的編輯視窗,其實這個視窗和SQL Server Management Studio很像,我們可以從左邊的地方迅速的修改屬性,如果是SQL神人,想直接Key SQL也可以,下面的視窗供神人使用,改完後會自動連動上面的視窗,這次我們在裡面加了一個CName,完成後就可以使用Ctrl+S來存檔。
這時候我們可以回到SQL Server物件總管,結果發現,CName欄位沒有加進去!!這是理所當然的,上面的儲存和正式的資料庫是沒有關係的,上面所儲存的是存在本機端,也就是sql這個檔案。
本機端的Table結構寫好後,我們可以利用綠色小箭頭 ( 開始偵錯 )來run run看,看看有無相依性等問題,這裡的綠色小箭頭,並不會正式部屬到正式DB上去,就如前面所說,他會檢查本機記憶體裡面的Schema來進行驗證比對。( 雖然輸出框的內容是建立,但實際是是不會發佈回SQL Server的 )
因為現在都已經拉回本機去做處理,如果有四個人同時開發,到底現在正式的SQL內容是甚麼呢?和目前本機的SQL差異多大?我想這個問題應該是每個人心中的疑惑,既然有疑惑!Microsoft一定會幫你搞定!於是,他有一個工具叫做結構描述比較,這個功能可以比較資料庫、專案的差異,甚至也可以比較資料庫對資料庫,或是專案對專案喔。
然後我們這邊就可以選擇要比對的兩個位置,左邊是目前的位置,也就是本機的專案位置,右邊則是目標為,我們可以點選箭頭,選擇目標位置。
他可以去和其他專案做比較,也可以和資料庫的內容作比較,連應用程式檔案都可以,感覺有沒有酷斃了!?
選好後,我們可以從左上角,按下比較。
出來的結果如圖,這裡不要衝動按下1、2、3、4,這裡的數字是方便我解釋…
首先,中間沒有紅框的畫面,會顯示出兩者之間差異的列表,所以我們可以看到ClientBasic這部分有差異,我們可以從中間鉛筆符號,看到即將要做怎樣的動作,這邊這個符號的意思,就是變更的意思。
1的部分就是更新目標,也就是準備要將兩邊的SQL做一個同步了;如果真的很擔心,也可以先使用隔壁的"產生指令碼"按鈕,來檢視產生的SQL。
2的部分是左右切換,還記得現在左邊是本機專案嗎?如果今天我們想要以Server為主,我們就可以按下此按鈕左右切換,這樣子,更新目標的時候,就會以Server為主,也就是說,本機上的CName會被Alter掉,畢竟Server目前是還沒有這個欄位的。
3的部分表示整段程式碼,差異的地點在哪裡,所以這邊會有兩條,紅色的區塊,代表著這個地方程式碼有並沒有,黃色代表這個地方有增加東西,而綠色的框框,表示目前顯示的區塊所佔的位置。
接下來,4的部分,代表著和左邊和右邊差異的SQL語法,這裡要提醒一下,如果看完整個SQL語法,會發現他是用Creat,但不用擔心,更新目標的時候,系統會自動判斷。
接下來,我們來看一下實際上會執行怎樣的SQL,我們點選上圖"更新"旁邊的產生指令碼,就會跳出產生的SQL給你看,但這部分有個地方要特別注意一下,如下圖,這裡會有兩個綠色小箭頭,上面的綠色小箭頭是針對專案來進行驗證偵錯的工作,而從產生指令碼開出來的視窗是Script處理視窗,Script處理視窗的綠色小箭頭,按下去,雖然會看到單步除錯,但實際上這個地方的綠色小箭頭,是已經開始針對DB進行修改的動作了,所以這部分要特別注意。
最後,無論我們使用"更新目標",或是開啟Script來進行處理,都可以輕鬆地就同步了兩邊的資訊。
後記
記得之前講這個工具的課程,讓大家為之轟動XDD,因為以往SQL的管理上,總是會有許多問題,例如目前的結構正式機和測試機差在哪邊,SQL要如何版控,SQL要如何佈署!?但現在SQL Server Data Tools的出現,徹底的強化整個開發的流程與管理,也解決了許多以往繞來繞去才能解決的問題,總之,這是非常好的工具,真的強力推薦大家試試看!!