Share via


在資料庫專案中使用參考

您可以將數種類型的參考加入至「資料庫專案」(Database Project) 以處理不同的情形。 加入不同類型參考所使用的程序稍有不同。

下表顯示可以加入的參考類型以及每種類型所處理的情況。

參考型別

使用原因

目前方案中的資料庫專案 (.dbproj)

您可以加入這種參考來支援數個案例。

  • 您可以在專案中參考另一個專案中的「資料庫物件」(Database Object),方式是加入參考並定義伺服器名稱的變數 (選擇性) 以及包含該物件之資料庫名稱的變數。 如果您的資料庫參考其他資料庫中的物件,便可以使用上述「跨資料庫參考」(Cross-Database Reference)。 如需詳細資訊,請參閱開始以小組開發參考其他資料庫的資料庫

如果您加入其他專案的參考,但未定義變數,則是建立複合專案。 當您部署這種專案時,也會部署其他專案中的物件。 如需詳細資訊,請參閱本主題後面的使用參考撰寫專案。

目前方案或不同方案的資料庫專案輸出 (.dbschema 檔案)

如果您必須參考其他資料庫中的物件,但想要將該資料庫與其他開發人員分開來,可加入資料庫「結構描述」(Schema) 檔案的參考。 如果您想防止變更或是無法更新資料庫,便可以採取這個方法。 例如,如果您的資料庫專案必須參考伺服器上共用和定義,但由多個資料庫專案使用的登入或金鑰,即可以加入 .dbschema 檔案的參考。 如需詳細資訊,請參閱開始以小組開發參考共用伺服器物件的資料庫

您可能會想參考包含伺服器物件定義的 .dbschema 檔案,但不想在部署資料庫專案時驗證伺服器上的設定。 針對此案例,您可以加入 master.dbschema 檔案的參考,並針對值為 "master" 的資料庫變數定義常值。 這樣一來,"master" 資料庫中定義之物件的參考便可順利解析而不會發生錯誤。 如需常值的詳細資訊,請參閱本主題後面的使用常值參考資料庫。

包含系統物件定義的 master.dbschema 檔案

如果您想參考系統物件,例如系統預存程序、系統資料表、系統檢視表或系統類別目錄,就必須加入適當 master.dbschema 的參考來解析這些參考。 例如,您可能會想參考預存程序中的 sys.sysobjects。 Visual Studio Premium 針對每個支援的 SQL Server 版本均提供一個 master.dbschema 檔案。 您可以在 [Program Files]\Microsoft Visual Studio 10.0\VSTSDB\Extensions\SqlServer\Version\DBSchemas 中找到 .dbschema 檔案,其中 Version 是您所使用的 SQL Server 版本 (例如 2005 或 2008)。

針對此案例,您可以加入適當 master.dbschema 檔案的參考,並針對值為 "master" 的資料庫變數定義常值。 這樣一來,"master" 資料庫中定義之物件的參考便可順利解析而不會發生錯誤。 如需常值的詳細資訊,請參閱本主題後面的使用常值參考資料庫。

目前方案中的 SQL Common Language Runtime (CLR) 專案

如果您正在開發一個或多個想要與資料庫專案一起部署的 SQLCLR 物件,可參考目前方案中的 SQLCLR 專案。 當您部署資料庫專案時,也會部署參考之 SQLCLR 專案所產生的組件。 CREATE ASSEMBLY 陳述式會從您為該參考指定的屬性建置。 如需詳細資訊,請參閱開始以小組開發參考 SQLCLR 物件的資料庫和本主題後面的使用跨資料庫參考。

目前方案中專案或不同來源的 SQLCLR 組件

如果您的資料庫專案必須參考 SQLCLR 組件中定義,但不是同時或由同一個小組開發的物件,可以加入該組件的參考。 當您部署資料庫專案時,也會部署參考的組件。

XML 結構描述定義 (如 .xsd 檔中所定義)

結構描述必須先註冊,才能與變數、參數或資料行產生關聯來建立型別 XML 變數、參數和資料行。 如果下列任何一項陳述成立,您可能會想使用型別 XML:

  • 您的 XML 資料具有結構描述,而您想要伺服器根據結構描述驗證該資料。

  • 您想要根據型別資訊最佳化儲存和查詢。

  • 您想要在編譯查詢時進一步利用型別資訊。

如需詳細資訊,請參閱開始以小組開發使用 XML 結構描述集合的資料庫

定義跨資料庫參考

如果您建立或匯入的資料庫物件參考其他資料庫中的物件,就必須在資料庫專案的屬性中定義對應的參考。 針對您參考的每個資料庫,您可以定義對應到要參考之伺服器和資料庫的 SETVAR 變數。 在修改物件定義以加入參考時,您可以使用這些變數進行定義,而不要使用伺服器和資料庫的明確名稱。 當您建置資料庫專案時,您指定的值就會取代變數。

跨資料庫參考的案例

Visual Studio Premium 支援下列案例:

  • 您已經建立資料庫專案並從現有資料庫匯入結構描述。 而結構描述包含的物件所參考的物件位在一個或多個其他資料庫上。 在專案的屬性中,您會定義對應的參考,並以 SETVAR 變數取代伺服器和資料庫的明確名稱。 因為這項定義,跨資料庫參考可以在設計階段進行驗證。 您也可以將資料庫專案部署到「隔離的開發環境」(Isolated Development Environment),在其中的「目標」(Target) 伺服器名稱與實際執行環境的目標伺服器名稱可能不同。

  • 您的資料庫專案包含跨資料庫參考,而這些參考使用 SETVAR 變數來識別伺服器和資料庫。 您想要變更這些變數名稱,並更新包含這些參考的物件定義。

  • 您想要參考正在開發的資料庫專案的其他資料庫結構描述。 您想要與小組共用這些結構描述,而不需要共用其他的資料庫專案。 您可以加入這些其他專案的資料庫結構描述檔案 (.dbschema) 的參考,並且只將結構描述檔案簽入版本控制。 藉由使用這個方法,對於包含您要參考結構描述的資料庫專案,您可以限制存取權限。 當您要部署資料庫專案,卻不要相依於該專案的任何專案時,也應該使用這個方法。

您可以使用「資料庫重構」(Database Refactoring),以執行與跨資料庫參考相關的其他工作。 如需詳細資訊,請參閱 HOW TO:重新命名伺服器或資料庫的參考

資料庫專案和結構描述檔案的參考

在加入資料庫專案的參考時,您可以指定另一個資料庫專案,或是建置資料庫專案時產生的結構描述檔案。

如果以下陳述成立,則應參考另一個資料庫專案:

  • 您必須同時變更包含參考資料庫和被參考資料庫的結構描述。 當您部署包含參考的資料庫專案時,也要部署被參考的資料庫專案。

如果下列任何陳述成立,則應參考結構描述檔案:

  • 您必須要參考的資料庫的專案不在目前的方案中。

  • 您必須部署單一專案,而不部署相依專案。

  • 您要參考的資料庫結構描述似乎不會變更。 在這個案例中,您可以將結構描述檔案簽入版本控制中。

跨資料庫參考的限制

匯入資料庫結構描述時,在物件定義中對其他資料庫的參考會產生警告,因為資料庫物件在部署前無法驗證這些參考。 在專案的屬性中定義資料庫參考後,您可以驗證物件定義並解決這些警告。 接著,您可以藉由使用變數取代伺服器和資料庫名稱,更新物件定義。 您也可以使用重構執行這項替換作業。 如需詳細資訊,請參閱 HOW TO:將參考加入至資料庫專案HOW TO:重新命名伺服器或資料庫的參考

您參考的伺服器和資料庫的變數與值,並不是針對組建組態的。 若要於命令提示字元指定伺服器和資料庫,必須以 MSBuild 變數的方式參考它們,這些變數可以在部署時間進行替換。

下列限制也適用:

  • 只有在資料庫有對應的資料庫專案時,才可以加入資料庫的參考。

  • 您必須先建置資料庫專案,才可以加入對該資料庫專案的結構描述檔案的參考。

  • 您必須建置被參考的資料庫專案,這樣對它們的跨資料庫參考才能夠解析而不出現警告。

  • 如果被參考的方案或資料庫專案的組建組態有所變更,您可能需要重建方案,這樣對它們的跨資料庫參考才能夠解析而不出現警告。

  • 如果您參考的資料庫專案物件位於其他的伺服器上,必須在目標伺服器上將其定義為連結的伺服器。 如需詳細資訊,請參閱 HOW TO:將參考加入至資料庫專案

  • 參考 master 資料庫時,您不需要使用跨資料庫參考。

  • 包含 SETVAR 變數的參考,必須一定是這種型式 [$(VariableName)]。 如果省略方括弧,您可能無法部署資料庫專案。

  • SETVAR 變數的名稱必須是唯一的。 如果伺服器名稱與資料庫名稱相同,您必須定義不同名稱的變數,但讓它們解析為相同值。

安全性考量

在建置資料庫專案時建立的結構描述檔案包含該專案的結構描述資訊。 您應該限制這種檔案的存取權限,以保護該結構描述資訊。 您可以藉由簽入結構描述檔案到「版本控制」(Version Control) 中,與小組共用這些檔案,而不是將它們部署到目標伺服器上。 如果要參考的資料庫的資料庫專案在相同方案中,則專案的其他開發人員在與版本控制進行同步或建置方案時,就會有適當的存取權限。

跨資料庫參考的範例

在您有兩個資料庫專案 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]
;

使用參考建立複合專案

資料庫和伺服器專案無法處理您在資料庫開發期間可能遇到的所有案例。 為了處理更複雜的案例,您可以從兩個以上的其他專案建立複合專案。

當您在資料庫專案中加入其他資料庫或伺服器專案的參考,但未提供值給所參考專案中的伺服器和資料庫變數時,就會建立複合專案。 當您加入這種參考時,加入參考的專案會包含參考所指向之專案中的所有物件和設定。

藉由建立複合專案,您可啟用下列案例:

  • 您可以管理參考共用登入或金鑰的資料庫結構描述。 如需詳細資訊,請參閱開始以小組開發參考共用伺服器物件的資料庫

  • 您可以將大型資料庫分割成幾個子專案,以提升效能或是將結構描述或物件類型分隔開來。 如果多個資料庫共用某些物件,但其他方面均不同,則也可以進行此變更。 只有在不造成循環參考的情況下,您才能將專案分割成兩個以上的子專案。

當您部署複合專案時,也要部署它參考的所有資料庫專案中的物件。 如需詳細資訊,請參閱開始以小組開發大型資料庫

使用常值參考資料庫

您可以定義資料庫參考變數,在目標部署環境中指定參考資料庫的名稱。 如果您不想使用 SQLCMD 變數,因為目標資料庫名稱在部署環境中永遠都相同的話,可以改為指定值為參考資料庫名稱的常值。

如果使用變數,語法可能看起來如下:

CREATE VIEW [dbo].[View1] AS SELECT * FROM [($MasterDbVar)].[dbo].[spt_values].

如果改使用常值,語法可能看起來如下:

CREATE VIEW [dbo].[View1] AS SELECT * FROM [master].[dbo].[spt_values]

如需如何指定常值的詳細資訊,請參閱 HOW TO:將參考加入至資料庫專案

請參閱

工作

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

HOW TO:將參考加入至資料庫專案

概念

建立和修改資料庫與伺服器物件