跨資料庫參考的概觀
更新:2007 年 11 月
您建立或匯入的「資料庫物件」(Database Object) 可以參考其他資料庫的物件。這些「跨資料庫參考」(Cross-Database Reference) 需要您在「資料庫專案」(Database Project) 的屬性中定義對應的參考。如果參考的物件在其他資料庫中,但沒有在專案中定義對應的參考,就會出現警告。針對您參考的每個資料庫,您可以定義對應到要參考之伺服器和資料庫的 SETVAR 變數。在修改物件定義以加入參考時,您可以使用這些變數進行定義,而不要使用伺服器和資料庫的明確名稱。當您建置資料庫專案時,就會由您指定的值取代變數。
![]() |
---|
為了讓跨資料庫參考專屬於特定組建組態,必須以 MSBuild 變數的方式定義這些參考的 SETVAR 變數。例如,在建置和部署資料庫專案到開發用伺服器 (Staging Server) 時,您可以使用某一組 MSBuild 變數,而在將相同專案建置和部署到實際執行伺服器 (Production Server) 時使用另一組變數。如果以伺服器和資料庫名稱的方式定義跨資料庫參考的 SETVAR 變數,不論您指定哪一個組建組態,參考的運作方式是相同的。 |
跨資料庫參考的案例
Visual Studio Team System Database 版支援下列案例:
您已經建立資料庫專案並從現有資料庫匯入結構描述。而結構描述包含的物件所參考的物件位在一或多個其他資料庫上。在專案的屬性中,您會定義對應的參考,並以 SETVAR 變數取代伺服器和資料庫的明確名稱。因為這項定義,跨資料庫參考可以在設計階段進行驗證。您也可以將資料庫專案部署到「隔離的開發環境」(Isolated Development Environment),在其中的「目標」(Target) 伺服器名稱與實際執行環境的目標伺服器名稱不同。
您的資料庫專案包含跨資料庫參考,而這些參考使用 SETVAR 變數來識別伺服器和資料庫。您想要變更這些變數名稱,並更新包含這些參考的物件定義。
您想要參考正在開發的資料庫專案的其他資料庫「結構描述」(Schema)。您想要與小組共用這些結構描述,而不需要共用其他的資料庫專案。您可以加入這些其他專案的資料庫中繼檔 (Metafile) (.dbmeta) 的參考,並且只將中繼檔簽入「版本控制」(Version Control)。藉由使用這個方法,對於包含您要參考結構描述的資料庫專案,您可以限制存取權限。當您要部署資料庫專案,卻不要相依於該專案的任何專案時,也應該使用這個方法。
您可以使用「資料庫重構」(Database Refactoring),以執行與跨資料庫參考相關的其他工作。如需詳細資訊,請參閱 HOW TO:重新命名伺服器或資料庫的參考。
資料庫專案和中繼檔的參考
在加入資料庫專案的參考時,您可以指定另一個資料庫專案,或是建置資料庫專案時產生的中繼檔。
如果是下列情形,則應該參考另一個資料庫專案:
- 對於包含參考的資料庫和被參考的資料庫,必須同時進行結構描述的變更。當您部署包含參考的資料庫專案時,也要部署被參考的資料庫專案。
如果是下列情形,則應該參考資料庫中繼檔:
您必須要參考的資料庫的專案不在目前的方案中。
您必須部署單一專案,而不部署相依專案。
您要參考的資料庫結構描述似乎不會變更。在這個案例中,您可以將資料庫中繼檔簽入版本控制中。
跨資料庫參考的限制
匯入資料庫結構描述時,在物件定義中對其他資料庫的參考會產生警告,因為資料庫物件在部署前無法驗證這些參考。在專案的屬性中定義資料庫參考後,您可以驗證物件定義並解決這些警告。接著,您可以藉由使用變數取代伺服器和資料庫名稱,更新物件定義。您也可以使用重構執行這項替換作業。如需詳細資訊,請參閱 HOW TO:建立跨資料庫參考和 HOW TO:重新命名伺服器或資料庫的參考。
您參考的伺服器和資料庫的變數與值,並不是針對組建組態的。若要於命令提示字元指定伺服器和資料庫,必須以 MSBuild 變數的方式參考它們,這些變數可以在部署時間進行替換。
下列限制也適用:
只有在資料庫有對應的資料庫專案時,才可以加入資料庫的參考。
您必須先建置資料庫專案,才可以加入對該資料庫專案的中繼檔的參考。
您必須建置被參考的資料庫專案,這樣對它們的跨資料庫參考才能夠解析而不出現警告。
如果被參考的方案或資料庫專案的組建組態有所變更,您可能需要重建方案,這樣對它們的跨資料庫參考才能夠解析而不出現警告。
如果您參考的資料庫專案物件位於其他的伺服器上,必須在目標伺服器上將其定義為連結的伺服器。如需詳細資訊,請參閱 HOW TO:建立跨資料庫參考。
參考 master 資料庫時,您不需要使用跨資料庫參考。
包含 SETVAR 變數的參考,必須一定是這種型式 [$(VariableName)]。如果省略方括弧,您可能無法部署資料庫專案。
SETVAR 變數的名稱必須是唯一的。如果伺服器名稱與資料庫名稱相同,您必須定義不同名稱的變數,而讓它們解析為相同值。
安全性考量
在建置資料庫專案時建立的中繼檔包含該專案的結構描述資訊。您應該限制中繼檔的存取權限,以保護該結構描述資訊。您可以藉由簽入中繼檔到版本控制中,與小組共用這些檔案,而不是將它們部署到目標伺服器上。如果要參考的資料庫的資料庫專案在相同方案中,則專案的其他開發人員在與版本控制進行同步或建置方案時,就會有適當的存取權限。
範例
在您有兩個資料庫專案 ReportDb 和 DependentDb 時,可能會想要從 ReportDb 參考 DependentDb 中的物件。一開始,您可以在 DependentDb 資料庫專案的屬性中加入參考,並定義下列變數:
RefServer
RefDatabase
RefServer 的值是 DependentDb 所在伺服器的名稱。而 RefDatabase 的值是 DependentDb 專案要部署的目標資料庫的名稱。在本範例中,RefServer 的值是 StageSvr,而 RefDatabase 的值是 DepDb。
您可以在 ReportDb 中加入檢視表,其中會從 DependentDb 的 Employee 資料表中選取所有資料行,而該資料表是要部署到伺服器 StageSvr 上的資料庫 DepDb 中。您應該為該檢視表建立下列物件定義:
CREATE VIEW [dbo].[DependentView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].[dbo].[Employee]
;