共用方式為


資料庫參考概觀

適用於:Microsoft Fabric 中的 SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 SQL 資料庫

SQL 專案中的資料庫參考可讓您透過連結至另一個專案、.dacpac 檔案或已發佈的 NuGet 套件,納入專案中未包含的物件。 新增至專案的資料庫物件可以是相同資料庫的一部分、相同伺服器上的不同資料庫,或是不同伺服器上的不同資料庫。 對於 SQL Server 開發,資料庫參考可用於連結到相同伺服器上的另一個資料庫,以進行三部分命名,或連結至不同伺服器上的不同資料庫,以進行跨資料庫查詢。 對於具有不同群組中大量物件的資料庫,資料庫參考可用來將資料庫分解成較小、更易於管理的專案。 較小的專案規模有助於提升效能,並縮短在迭代式本地開發期間建立專案所需的時間。

參考 dacpac、nuget 套件和資料庫參考專案的 SQL 專案範例螢幕擷取畫面。

注意

專案參考和 NuGet 套件參考是新開發中資料庫參考的建議方法。 原始 SQL 專案不支援參考 NuGet 套件。

SQL 專案檔範例和語法

資料庫參考會透過 .sqlproj 檔案中的項目納入專案,類似於 C# 專案。 當資料庫參考位於相同伺服器上的不同資料庫時,專案參考中會包含 <DatabaseSqlCmdVariable> 元素。 當資料庫參考位於不同伺服器上的不同資料庫時,專案參考中也會包含 <ServerSqlCmdVariable> 元素。 相同資料庫的資料庫參考不包含 <ServerSqlCmdVariable><DatabaseSqlCmdVariable> 元素。

在 SQL 指令碼中包括資料庫參考的特定參考,使用專案檔中命名的 SQLCMD 變數來指定資料庫名稱。 例如,下列 SQL 指令碼會參考 Warehouse 資料庫中的資料表:

SELECT ProductId, StorageLocation, BinNumber
FROM [$(Warehouse)].[Production].[ProductInventory]

$(Warehouse) SQLCMD 變數對應的資料庫參考包含在專案檔中,並包含 <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>

專案參考

在此範例中,專案參考會新增至屬於相同資料庫的 SQL 專案 AdventureWorksSalesLT.sqlproj

  <ItemGroup>
    <ProjectReference Include="..\AdventureWorks\AdventureWorksSalesLT.sqlproj">
      <Name>AdventureWorksSalesLT</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <Private>True</Private>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
    </ProjectReference>
  </ItemGroup>

Dacpac 套件參考

如需 SQL 專案中套件參考的詳細資訊,請參閱 SQL 專案套件參考一文。

下列範例中顯示 SQL 2022 master 系統資料庫的套件參考

  <ItemGroup>
    <PackageReference Include="Microsoft.SqlServer.Dacpacs.Master" Version="160.2.1" />
  </ItemGroup>

Dacpac 成品參考

不建議直接參考 .dacpac 成品檔案,以用於 SDK 樣式專案中的新開發。 而是使用 NuGet 套件參考

在原始 SQL 專案中,.dacpac 檔案參考會在 .sqlproj 檔案中以 <ArtifactReference> 指定。 下列範例顯示相同伺服器上不同專案中 .dacpac 檔案的 .dacpac 成品參考:

  <ItemGroup>
    <ArtifactReference Include="..\AdventureWorks\Warehouse\bin\Release\Warehouse.dacpac">
      <HintPath>..\AdventureWorks\Warehouse\bin\Release\Warehouse.dacpac</HintPath>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>
    </ArtifactReference>
  </ItemGroup>

新增和使用專案參考

新增專案參考

若要在 Visual Studio 中將專案參考新增至 SQL 專案,以滑鼠右鍵按一下 [方案總管] 中專案下的 [參考] 節點,然後選取 [新增資料庫參考]

資料庫參考 Visual Studio 對話方塊的螢幕擷取畫面。

[新增資料庫參考] 對話方塊會顯示新增參考的選項:

  • 來自相同解決方案的 SQL 專案
  • 系統資料庫 (來自 Visual Studio 自動包含的 .dacpac 檔案)
  • 本機檔案系統上的任何資料層應用程式 (.dacpac) 檔案

對話方塊也會提供下拉式清單,以從下列參考位置選取:

  • 相同的資料庫
  • 不同的資料庫,相同的伺服器
  • 不同的資料庫,不同的伺服器

若要將專案參考新增至 SQL 專案,請將 <ItemGroup> 項目新增至 .sqlproj 檔案,其中包含每個資料庫參考的適當參考專案。 例如,下列專案參考會新增至 SQL 專案,以參考不同伺服器上不同資料庫中的 WorldWideImporters 專案:

  <ItemGroup>
    <ProjectReference Include="..\Contoso\WorldWideImporters.sqlproj">
      <Name>WorldWideImporters</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <ServerSqlCmdVariable>WWIServer</ServerSqlCmdVariable>
      <DatabaseSqlCmdVariable>WorldWideImporters</DatabaseSqlCmdVariable>
    </ProjectReference>
  </ItemGroup>

專案參考用於 SQL 專案中的範例檢視定義:

CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]

若要在 [SQL 資料庫專案] 延伸模組中將資料庫參考新增至 SQL 專案,請在 [資料庫專案] 檢視中的專案下,以滑鼠右鍵按一下 [資料庫參考] 節點,然後選取 [新增資料庫參考]

Azure Data Studio 新增參考對話方塊的螢幕擷取畫面。

可用的參考型別如下:

  • 系統資料庫
  • 資料層應用程式 (.dacpac)
  • 發佈的資料層應用程式 (.nupkg)
  • 專案

延伸模組也會提示從下列參考位置選取:

  • 相同的資料庫
  • 不同的資料庫,相同的伺服器
  • 不同的資料庫,不同的伺服器

若要將專案參考新增至 SQL 專案,請將 <ItemGroup> 項目新增至 .sqlproj 檔案,其中包含每個資料庫參考的適當參考專案。 例如,下列專案參考會新增至 SQL 專案,以參考不同伺服器上不同資料庫中的 WorldWideImporters 專案:

  <ItemGroup>
    <ProjectReference Include="..\Contoso\WorldWideImporters.sqlproj">
      <Name>WorldWideImporters</Name>
      <Project>{d703fc7a-bc47-4aef-9dc5-cf01094ddb37}</Project>
      <SuppressMissingDependenciesErrors>False</SuppressMissingDependenciesErrors>
      <ServerSqlCmdVariable>WWIServer</ServerSqlCmdVariable>
      <DatabaseSqlCmdVariable>WorldWideImporters</DatabaseSqlCmdVariable>
    </ProjectReference>
  </ItemGroup>

專案參考用於 SQL 專案中的範例檢視定義:

CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]

使用專案參考建置

使用資料庫參考建置 SQL 專案可能需要額外的設定,以確保參考的物件可在建置程序期間使用。 例如,如果在持續整合 (CI) 管線中建置專案,則需要設定類似於本機開發環境的組建代理程式環境。

  • SQL 專案中的 .dacpac 參考需要 .dacpac 存在於與專案檔中指定的相同相對檔案路徑的組建代理程式上。
  • SQL 專案中的專案參考要求參考專案必須存在於與專案檔中指定的相同相對檔案路徑的組建代理程式上,而且能夠在組建代理程式上成功建置。
  • 對於在 Visual Studio 中原始 SQL 專案中建立的系統資料庫參考,需要組建代理程式已安裝 Visual Studio。
  • SQL 專案中的 NuGet 套件參考需要將套件發佈至 NuGet 摘要,該摘要也會設定為組建代理程式的套件來源。

使用專案參考發佈

發佈由專案建立並包含資料庫參考的 .dacpac 不需要額外的步驟。 .dacpac 檔案包含專案檔中指定的參考物件和 SQLCMD 變數。

對於相同資料庫中物件的資料庫參考,參考專案中的物件會包含在 .dacpac 檔案中,但預設不包含在部署中。 若要在部署中包含物件,請使用 SqlPackage 命令列工具中的 /p:IncludeCompositeObjects=true 選項。 例如,下列命令會 /p:IncludeCompositeObjects=true 選項來部署 AdventureWorks 專案,以包含 AdventureWorks 資料庫參考中的物件:

sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /p:IncludeCompositeObjects=true

將具有資料庫參考的 .dacpac 檔案部署到不同的資料庫 (在相同或不同的伺服器上),專案檔中指定的 SQLCMD 變數必須設定為適用於目標環境的相應值。 在部署期間設定 SQLCMD 變數值使用 SqlPackage 命令列工具中的 /v 選項來完成。 例如,下列命令會將 WorldWideImporters 變數設定為 WorldWideImporters,將 WWIServer 變數設定為 localhost

sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:WorldWideImporters=WorldWideImporters /v:WWIServer=localhost