某天早晨,我問一個程序員:“如果你接受了一個修改一個存儲過程的任務,那麼你會如何一步步的完成這個工作"?他的回答是:“先啓動vss,找到這個文件,然後用‘查詢分析器’修改,調試,然後提交”。
都是些什麼阿貓阿狗的啊。vss就不怎麼樣了,用它來定位文件是很麻煩的。通過查詢分析器修改sql也很老套。並且這個工具沒有代碼提示,沒有重構支持,也沒有TDD!sql開發是應用開發的不可或缺的一部分,和它起到的作用相比,來自業界對sql的支持是非常不夠的。尤其是缺乏一個高效率的IDE。
b. sql 語言終於升艙了
幸運的是,這樣的日子就要結束了。VS2010的推出讓sql可以享受如同C#的IDE了。微軟這幾年非常喜歡提一個組合詞 first-class(頭等艙)——如果把VS2010當成飛機的話,那麼坐在頭等艙的,確定是C#無疑。VS2010的推出,新增加了兩個頭等艙乘客——F#,SQL。是的,還有SQL語言。就是說,SQL 不必在和什麼查詢分析器,SQL PROMPTOR,甚至notepad這些雞零狗碎的軟件打交道了。
c. 具體特性
IDE 能夠給我們帶來什麼?不外乎是 deploy 、project navigator、refactor、Intellisense 、TDD。採用VS2010,這些都有了。要大氣!
現在SQL 可以如同C#那樣,有工程文件了。工程文件是很多年前的概念了,它把離散的文件組合到一起。這樣,典型的一個應用產品,就會有兩個工程文件,應用程序工程,數據庫工程(Database Project)。兩者工程構成解決方案文件(solution)。即使沒有采用c#等dotnet語言開發,比如delphi,也可以從vs2010的Database Project獲益。因爲Database Project和應用語言無關,僅僅和SQL語言有關。只要是開發存儲過程、表、視圖、函數等都可以用。好像SQL 2005 Management Studio 也有工程文件。不過有了vs2010 ,何必用這樣的爲開發者充門面的東西呢,SQL 2005 Management Studio是DBA用的。開發者要用 vs2010。採用Database Project也不必從頭開始。 創建了Database Project後,VS2010可以Import script,或者Import from Database——保護現有的開發資源嘛。
Intellisense 代碼提示也是Ok了。什麼表,存儲過程和函數以及它們的參數都是可以提示的。重構雖然不多,但是可以做rename,這是最常用的重構了。比這更好的,refactor會有一個日誌記錄叫做refactor log,通過它可以更好的自動發佈。鑑於發佈是比較複雜和強大的,因爲會另外說明。
要修改文件,首先要找到文件,利用ide的查找文件必須要快——不能在這些枝節的工作上浪費時間。查找文件到底有多重要?可以說很多人沒有dpack的alt+U,連程序都不想寫了。dpack是Visual studio的一個文件查找插件,alt+U是查找文件的快捷鍵。現在VS2010可以繼續使用dpack來做文件查找。當然內置的查找也有增強。
Schema comparor/data comparor 也做的不錯。可以對數據庫和Database Project之間做 結構和數據對比,查看差異。
d. 我認爲還有一個令人興奮的特性——數據庫的聲明型升級。注意我的用詞是“興奮”。這2年來讓我興奮的軟件技術不多,比如everything這個小工具軟件讓我興奮,現在"聲明型數據庫升級"是第二個。所謂的“聲明型升級”,就是說,我告訴工具,升級前數據庫是什麼樣子,升級後的數據庫是什麼樣子,然後中間需要做什麼樣的修改,由工具搞定。和聲明型升級對應的是過程型升級——告訴工具,應該如何一步步的從現在的數據庫變成新的數據庫。我在2003年曾經考慮過這個聲明型升級的做法,但是種種原因,沒有做到。前面提到,因爲比較複雜,專文說明。
e. 應用和代價
可以在需要數據庫開發的項目中使用,不管是c/s,還是b/s,反正需要數據庫開發的,都可以用。代價是現在的電腦恐怕很多需要換掉——vs2010吃內存,吃CPU週期啊。
f. 支持 Sql Server 2000 嗎?
看起來:vs2010並不支持sql2000的工程模板,僅僅支持2005,2008。
直接改數據庫爲sql2000的,deploy會報錯:說明需要一個對應版本的DatabaseSchemaProvider 。
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.TSqlTasks.targets(120,5): Error Deploy01234: The source database schema provider Sql100DatabaseSchemaProvider could not be translated to provider Sql80DatabaseSchemaProvider. Deployment cannot continue.
vs2008可以支持sql2000,但是僅僅作爲sql的容器,而在vs2010纔有了 Intellisense, build-time validation, automatic deployment 。