Přehled odkazů na databáze

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Odkazy na databáze v projektech SQL umožňují začlenit objekty, které nejsou součástí projektu, propojením s jiným projektem, .dacpac souborem nebo publikovaným balíčkem NuGet. Databázové objekty, které přidáte do projektu, můžou být součástí stejné databáze, jiné databáze na stejném serveru nebo jiné databáze na jiném serveru. Pro SQL Server vývoj použijte odkazy na databáze k propojení s jinou databází na stejném serveru pro třídílné pojmenování nebo k propojení s jinou databází na jiném serveru pro dotazy napříč databázemi. Pro databáze s velkým počtem objektů v různých skupinách použijte odkazy na databáze k rozdělení databáze na menší a lépe spravovatelné projekty. Menší velikost projektu může pomoct zlepšit výkon a zkrátit dobu potřebnou k sestavení projektu během iterativního místního vývoje.

Snímek obrazovky s příkladem projektu SQL odkazujícího na dacpac, balíček NuGet a projekt s odkazy na databáze

Note

Odkazy na projekty a odkazy na balíčky NuGet můžete použít pro odkazy na databáze v novém vývoji. Původní projekty SQL nepodporují odkazování na balíčky NuGet.

Ukázka a syntaxe souboru projektu SQL

Zahrnout do projektu odkazy na databáze prostřednictvím položek v .sqlproj souboru, podobně jako projekty jazyka C#. Pomocí syntaxe SQLCMD můžete odkazovat na název databáze v objektech projektu SQL. Pokud odkaz na databázi směřuje na jinou databázi na stejném serveru, zahrňte do odkazu na projekt element <DatabaseSqlCmdVariable>. Pokud odkaz na databázi odkazuje na jinou databázi na jiném serveru, zahrňte <ServerSqlCmdVariable> také prvek do odkazu na projekt. Databázové odkazy na stejnou databázi nezahrnují <ServerSqlCmdVariable> ani <DatabaseSqlCmdVariable> prvky.

Pokud chcete do skriptů SQL zahrnout konkrétní odkaz na odkaz na databázi, zadejte název databáze pomocí proměnných SQLCMD pojmenovaných v souboru projektu. Například následující skript SQL odkazuje na tabulku v Warehouse databázi:

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

Soubor projektu obsahuje odkaz na databázi odpovídající $(Warehouse) proměnné SQLCMD a obsahuje <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>.

Pojmenování stejné databáze ve třech částech

Pokud objekt v projektu SQL odkazuje na jiný objekt ve stejné databázi, není třídílné pojmenování nutné, ani když jsou objekty zahrnuty prostřednictvím odkazu na databázi. Projekty SQL však obsahují automatickou proměnnou SQLCMD pro název databáze, kterou můžete použít ve skriptech SQL k odkazování na databázi projektu bez pevného zakódování názvu. Pokud je potřeba třídílné pojmenování, použijte ve svých skriptech SQL k odkazování na databázi $(DatabaseName). Například následující skript SQL odkazuje na tabulku v databázi projektu:

UPDATE [$(DatabaseName)].[SalesLT].[Customer]
SET [SalesPerson] = 'John Doe',
    [ModifiedDate] = GETDATE()
WHERE [CustomerId] = @CustomerId;

Databázové literální hodnoty

V některých případech může být nutné použít jako název databáze v odkazu na databázi ve vašich objektech SQL literální (nikoli proměnnou) hodnotu. Soubor můžete nakonfigurovat .sqlproj tak, aby místo použití proměnné SQLCMD zadal hodnotu literálu pro název databáze. Prvek používaný k určení literálové hodnoty je <DatabaseLiteralValue>. Pokud použijete tento prvek, nepoužívejte <DatabaseSqlCmdVariable> element. Uvnitř elementu <DatabaseLiteralValue> zadáte hodnotu literálu pro název databáze. Například odkaz na databázi s <DatabaseVariableLiteralValue>WarehouseDB</DatabaseVariableLiteralValue> se používá ve skriptu SQL následujícím způsobem:

SELECT ProductId,
       StorageLocation,
       BinNumber
FROM [WarehouseDB].[Production].[ProductInventory];

Odkazy na projekt

V tomto příkladu přidáte odkaz na projekt SQL s názvem AdventureWorksSalesLT.sqlproj , který je součástí stejné databáze.

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

Odkazy na balíčky Dacpac

Další informace o odkazech na balíčky v projektech SQL naleznete v tématu Odkazy na balíčky projektů SQL.

Následující příklad ukazuje odkaz na master balíček systémové databáze pro SQL Server 2022:

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

Odkazy na artefakty Dacpac

Nepoužívejte přímé odkazy na .dacpac soubor artefaktů pro nový vývoj v projektech ve stylu sady SDK. Místo toho použijte odkazy na balíčky NuGet.

V původních projektech SQL zadáváte odkazy na soubory .dacpac v souboru .sqlproj pomocí položky <ArtifactReference>. Následující příklad ukazuje .dacpac odkaz na soubor artefaktu v jiném projektu na stejném serveru:

  <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>

Přidání a použití odkazů na projekt

Přidání odkazu na projekt

Pokud chcete přidat odkaz na projekt SQL v sadě Visual Studio, klikněte pravým tlačítkem myši na uzel Odkazy pod projektem v Průzkumníku řešení a vyberte Přidat odkaz na databázi.

Snímek obrazovky dialogového okna aplikace Visual Studio pro odkazy na databáze

Dialogové okno Přidat odkaz na databázi obsahuje možnosti pro přidání odkazu na:

  • projekt SQL ze stejného řešení
  • systémová databáze (ze .dacpac souborů automaticky zahrnutých v sadě Visual Studio)
  • jakýkoli soubor aplikace datové vrstvy .dacpac na místním systému souborů

V dialogovém okně je také rozevírací seznam, který můžete vybrat z následujících referenčních umístění:

  • stejná databáze
  • různé databáze, stejný server
  • jiná databáze, jiný server

Pokud chcete přidat odkaz na projekt SQL, přidejte <ItemGroup> do .sqlproj souboru položku s příslušnou referenční položkou pro každý odkaz na databázi. Do projektu SQL se například přidá následující odkaz na projekt SQL, který bude odkazovat WorldWideImporters na projekt v jiné databázi na jiném serveru:

  <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>

Odkaz na projekt se používá v ukázkové definici zobrazení v projektu SQL:

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

Chcete-li přidat odkaz na databázi do projektu SQL v rozšíření PROJEKTY služby SQL Database, klikněte pravým tlačítkem myši na uzel Odkazy na databáze v projektu v zobrazení Databázové projekty a vyberte Přidat odkaz na databázi.

Snímek obrazovky s dialogovým oknem pro přidání odkazu v editoru Visual Studio Code

Dostupné odkazové typy jsou:

  • systémová databáze
  • aplikace datové vrstvy (.dacpac)
  • publikovaná aplikace pro vrstvu dat (.nupkg)
  • projekt

Rozšíření také zobrazí výzvu k výběru z následujících referenčních umístění:

  • stejná databáze
  • různé databáze, stejný server
  • jiná databáze, jiný server

Pokud chcete přidat odkaz na projekt SQL, přidejte <ItemGroup> do .sqlproj souboru položku s příslušnou referenční položkou pro každý odkaz na databázi. Do projektu SQL se například přidá následující odkaz na projekt SQL, který bude odkazovat WorldWideImporters na projekt v jiné databázi na jiném serveru:

  <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>

Odkaz na projekt se používá v ukázkové definici zobrazení v projektu SQL:

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

Pokud chcete přidat odkaz na projekt SQL, přidejte <ItemGroup> do .sqlproj souboru položku s příslušnou referenční položkou pro každý odkaz na databázi. Do projektu SQL se například přidá následující odkaz na projekt SQL, který bude odkazovat WorldWideImporters na projekt v jiné databázi na jiném serveru:

  <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>

Odkaz na projekt se používá v ukázkové definici zobrazení v projektu SQL:

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

Sestavování pomocí odkazů na projekty

Sestavení projektu SQL s odkazy na databáze může vyžadovat další konfiguraci, aby byly během procesu sestavení k dispozici odkazované objekty. Pokud například vytváříte projekt v kanálu kontinuální integrace (CI), musíte nastavit prostředí agenta sestavení podobně jako místní vývojové prostředí.

  • .dacpac odkazy v projektu SQL vyžadují, aby .dacpac byl přítomen na agentu sestavení na stejné relativní cestě k souboru, jako je uvedeno v souboru projektu.
  • Odkazy na projekt v projektu SQL vyžadují, aby odkazovaný projekt byl přítomen na agentu sestavení ve stejné relativní cestě k souboru, jak je uvedeno v souboru projektu, a aby jej bylo možné na agentu sestavení úspěšně sestavit.
  • Systémové odkazy na databáze vytvořené v původních projektech SQL v Visual Studio vyžadují, aby agent sestavení měl Visual Studio nainstalován.
  • Odkazy na balíčky NuGet v projektu SQL vyžadují publikování balíčku do informačního kanálu NuGet, který je také nastaven jako zdroj balíčku pro agenta sestavení.

Publikování s odkazy na projekt

Publikování vytvořeného .dacpac projektu s odkazy na databáze nevyžaduje žádné další kroky. Soubor .dacpac obsahuje odkazované objekty a proměnné SQLCMD zadané v souboru projektu.

U databázových odkazů na objekty ve stejné databázi jsou objekty z odkazovaného projektu zahrnuty do .dacpac souboru, ale ve výchozím nastavení nejsou zahrnuty do nasazení. Pokud chcete zahrnout objekty do nasazení, použijte /p:IncludeCompositeObjects=true možnost v nástroji příkazového řádku SqlPackage. Například následující příkaz nasadí AdventureWorks projekt s /p:IncludeCompositeObjects=true možností zahrnout objekty z databázových odkazů na AdventureWorks:

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

Když nasadíte .dacpac soubor s odkazy na databázi na jinou databázi (na stejném nebo jiném serveru), nastavte proměnné SQLCMD zadané v souboru projektu na správné hodnoty pro cílové prostředí. Pomocí možnosti v nástroji příkazového řádku /v nastavte hodnoty proměnných SQLCMD během nasazování. Například následující příkaz nastaví proměnnou WorldWideImporters na WorldWideImporters a proměnnou WWIServer na localhost:

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