共用方式為


跨資料庫參考的概觀

更新: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]
;

請參閱

工作

HOW TO:重新命名伺服器或資料庫的參考

概念

使用資料庫物件概觀

Database Edition 的用語概觀

其他資源

HOW TO:建立跨資料庫參考