做單一系統資料庫專案,透過SQL Project方式開發,基本上並無太大問題,但是,如果在企業內部時候,會遇到一個實務上問題是,當要把某一個系統的資料庫轉換變成SQL Project時候,裡面如果Script有參照到其他資料庫,或是你在A資料庫下寫View
或是Store Procedure
時必須參照到同一台Server不同DB抓資料(如果是Link Server可以參考這解決[點我],這時候在A資料庫專案終究會有問題出現,會發現你的Script出現紅色警告,甚至無法編譯成功。範例是當你在A DB的View用到B DB的Table
最簡單解決方式,當然也是把另一個DB也變成SQL Project,然後做Database Reference,但是,實務上要執行會是有相當難度
- 第一:你可能只用到一個資料表,卻要把整個DB變成你的專案
- 第二:DB Owner並不是你
所以,必須要有變相的做法來解決這問題,不然,在A資料庫的SQL Project將會無法編譯成功,又或是需要大費周章把有參照到資料庫都變成SQL Project
建立一個被參照DB的殼
在自己專案內,建立一個要參照B資料庫的專案檔,在專案檔下面建立要對應的Table
然後,在Table
的欄位中,只要放入你所有需要的欄位就可以
設定SQL Project參照
建立好要被參照SQL Project後,就在原來SQL Project去參照它
然後就會跳出相關設定的屬性
- 紅色框,就選擇剛剛要被參照的SQL Project名稱
- 藍色框,則是透過變數方式去設定在A SQL Project要替代的變數,其中,
Database Name
如果SQL Project專案名稱與實際DB Name不同,這邊要換成實際DB Name,這樣在後續部署上才不會出問題,至於變數名稱就看自己喜好訂定
設定完成後,會多出一個Reference,這跟寫C#一樣,是參照不同Assemably的概念
透過變數方式,只要在後面有用到這個DB時候,都可以透過變數取代
所以,就可以把剛剛上面語法變成下面這樣,用[$(RefHR)]
去代替B
,就可以解決無法參照問題
但是,這種做法透過New Schema Comparison
去部署,也是可以的唷
因為,Visual Studio在幫你部署SQL Statement時候,自動把[$(RefHR)]
變數至換成實際的值,所以,透過這樣做法也還是可以能用SQL Project做版控的,只是切記別真的把被參照的DB也部署到Server就好