Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Med databasreferenser i SQL-projekt kan du införliva objekt som inte ingår i ett projekt genom att länka till ett annat projekt, .dacpac en fil eller ett publicerat NuGet-paket. Databasobjekten som du lägger till i ett projekt kan ingå i samma databas, en annan databas på samma server eller en annan databas på en annan server. För SQL Server utveckling använder du databasreferenser för att länka till en annan databas på samma server för namngivning i tre delar eller för att länka till en annan databas på en annan server för frågor mellan databaser. För databaser med ett stort antal objekt i distinkta grupper använder du databasreferenser för att dela upp en databas i mindre, mer hanterbara projekt. Mindre projektstorlek kan hjälpa till att förbättra prestanda och minska den tid som krävs för att skapa ett projekt under iterativ lokal utveckling.
Note
Använd projektreferenser och NuGet-paketreferenser för databasreferenser i ny utveckling. Ursprungliga SQL-projekt har inte stöd för att referera till NuGet-paket.
EXEMPEL och syntax för SQL-projektfil
Inkludera databasreferenser i ett projekt via poster i .sqlproj filen, ungefär som C#-projekt. Använd SQLCMD-syntax för att referera till databasnamnet i SQL-projektobjekt. När en databasreferens pekar på en annan databas på samma server ska du inkludera ett <DatabaseSqlCmdVariable> element i projektreferensen. När en databasreferens pekar på en annan databas på en annan server ska du även inkludera ett <ServerSqlCmdVariable> element i projektreferensen. Databasreferenser till samma databas inkluderar inte <ServerSqlCmdVariable>- eller <DatabaseSqlCmdVariable>-element.
Om du vill inkludera en specifik referens till databasreferensen i SQL-skripten använder du SQLCMD-variabler med namnet i projektfilen för att ange databasnamnet. Följande SQL-skript refererar till exempel till en tabell i Warehouse databasen:
SELECT ProductId,
StorageLocation,
BinNumber
FROM [$(Warehouse)].[Production].[ProductInventory];
Projektfilen innehåller en databasreferens som motsvarar $(Warehouse) SQLCMD-variabeln och innehåller <DatabaseSqlCmdVariable>Warehouse</DatabaseSqlCmdVariable>.
Trepartsnamngivning i samma databas
När ett objekt i ett SQL-projekt refererar till ett annat objekt i samma databas behövs inte namngivning i tre delar även om objekten ingår via en databasreferens. SQL-projekt innehåller dock en automatisk SQLCMD-variabel för databasnamnet, som du kan använda i SQL-skript för att referera till projektets databas utan att hårdkoda namnet. Om du behöver namngivning i tre delar kan du använda $(DatabaseName) i dina SQL-skript för att referera till databasen. Följande SQL-skript refererar till exempel till en tabell i projektets databas:
UPDATE [$(DatabaseName)].[SalesLT].[Customer]
SET [SalesPerson] = 'John Doe',
[ModifiedDate] = GETDATE()
WHERE [CustomerId] = @CustomerId;
Databasliterala värden
I vissa fall kan du behöva använda ett literalvärde (icke-variabel) för namnet på databasen från en databasreferens i dina SQL-objekt. Du kan konfigurera filen så att den .sqlproj anger ett literalvärde för ett databasnamn i stället för att använda en SQLCMD-variabel. Elementet som används för att ange ett literalvärde är <DatabaseLiteralValue>. Om du använder det här elementet ska du inte använda elementet <DatabaseSqlCmdVariable> . I elementet <DatabaseLiteralValue> anger du literalvärdet för databasnamnet. En databasreferens med <DatabaseVariableLiteralValue>WarehouseDB</DatabaseVariableLiteralValue> används till exempel i ett SQL-skript på följande sätt:
SELECT ProductId,
StorageLocation,
BinNumber
FROM [WarehouseDB].[Production].[ProductInventory];
Projektreferenser
I det här exemplet lägger du till en projektreferens till ett SQL-projekt med namnet AdventureWorksSalesLT.sqlproj som ingår i samma databas.
<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-paketreferenser
Mer information om paketreferenser i SQL-projekt finns i PAKETreferenser för SQL-projekt.
I följande exempel visas en paketreferens till systemdatabasen master för SQL Server 2022:
<ItemGroup>
<PackageReference Include="Microsoft.SqlServer.Dacpacs.Master" Version="160.2.1" />
</ItemGroup>
Dacpac-artefaktreferenser
Använd inte direkta referenser till en .dacpac artefaktfil för ny utveckling i SDK-liknande projekt. Använd i stället NuGet-paketreferenser.
I ursprungliga SQL-projekt anger du filreferenser i .sqlproj-filen med ett <ArtifactReference>-objekt. I följande exempel visas en .dacpac artefaktreferens till en .dacpac fil i ett annat projekt på samma server:
<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>
Lägga till och använda projektreferenser
Lägga till en projektreferens
Om du vill lägga till en projektreferens till ett SQL-projekt i Visual Studio högerklickar du på noden Referenser under projektet i Prieskumník riešení och väljer Lägg till databasreferens.
Dialogrutan Lägg till databasreferens visar alternativ för att lägga till en referens till:
- ett SQL-projekt från samma lösning
- en systemdatabas (från
.dacpacfiler som automatiskt ingår i Visual Studio) - alla programfiler på datanivå (
.dacpac) i det lokala filsystemet
Dialogrutan innehåller också en listruta för att välja mellan följande referensplatser:
- samma databas
- annan databas, samma server
- annan databas, annan server
Om du vill lägga till en projektreferens till ett SQL-projekt lägger du till ett <ItemGroup> objekt i .sqlproj filen med ett lämpligt referensobjekt för varje databasreferens. Följande projektreferens läggs till i ett SQL-projekt för att referera WorldWideImporters till projektet i en annan databas på en annan server:
<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>
Projektreferensen används i en exempelvydefinition i SQL-projektet:
CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]
Om du vill lägga till en databasreferens till ett SQL-projekt i SQL Database Projects-tillägget högerklickar du på noden Databasreferenser under projektet i vyn Databasprojekt och väljer Lägg till databasreferens.
De tillgängliga referenstyperna är:
- systemdatabas
- datanivåprogram (
.dacpac) - publicerat datanivåprogram (
.nupkg) - project
Tillägget uppmanar också att välja från följande referensplatser:
- samma databas
- annan databas, samma server
- annan databas, annan server
Om du vill lägga till en projektreferens till ett SQL-projekt lägger du till ett <ItemGroup> objekt i .sqlproj filen med ett lämpligt referensobjekt för varje databasreferens. Följande projektreferens läggs till i ett SQL-projekt för att referera WorldWideImporters till projektet i en annan databas på en annan server:
<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>
Projektreferensen används i en exempelvydefinition i SQL-projektet:
CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]
Om du vill lägga till en projektreferens till ett SQL-projekt lägger du till ett <ItemGroup> objekt i .sqlproj filen med ett lämpligt referensobjekt för varje databasreferens. Följande projektreferens läggs till i ett SQL-projekt för att referera WorldWideImporters till projektet i en annan databas på en annan server:
<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>
Projektreferensen används i en exempelvydefinition i SQL-projektet:
CREATE VIEW dbo.WorldWide_Products
AS
SELECT ProductID, ProductName, SupplierID
FROM [$(WWIServer)].[$(WorldWideImporters)].[Purchasing].[Suppliers]
Skapa med projektreferenser
Att skapa ett SQL-projekt med databasreferenser kan kräva extra konfiguration för att säkerställa att de refererade objekten är tillgängliga under byggprocessen. Om du till exempel skapar ett projekt i en CI-pipeline (kontinuerlig integrering) måste du konfigurera byggagentmiljön på samma sätt som den lokala utvecklingsmiljön.
-
.dacpacreferenser i SQL-projektet kräver att.dacpacfinns närvarande på byggagenten på samma relativa filsökväg som anges i projektfilen. - Projektreferenser i SQL-projekt kräver att det refererade projektet finns på byggagenten på samma relativa filsökväg som anges i projektfilen och kan byggas framgångsrikt på byggagenten.
- Systemdatabasreferenser som skapats i ursprungliga SQL-projekt i Visual Studio kräver att byggagenten har Visual Studio installerat.
- NuGet-paketreferenser i SQL-projektet kräver att paketet publiceras till en NuGet-feed som också anges som paketkälla för byggagenten.
Publicera med projektreferenser
Det krävs inga extra steg för att publicera ett projekt som byggts med .dacpac och innehåller databasreferenser. Filen .dacpac innehåller de refererade objekten och SQLCMD-variablerna som anges i projektfilen.
För databasreferenser till objekt i samma databas inkluderas objekten från det refererade projektet i .dacpac filen men ingår inte i distributionen som standard. Om du vill inkludera objekten i distributionen använder du /p:IncludeCompositeObjects=true alternativet i kommandoradsverktyget SqlPackage. Till exempel distribuerar följande kommando projektet AdventureWorks med alternativet /p:IncludeCompositeObjects=true för att inkludera objekt från databasreferenserna till AdventureWorks:
sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /p:IncludeCompositeObjects=true
När du distribuerar en .dacpac fil med databasreferenser till en annan databas (på samma eller annan server) anger du de SQLCMD-variabler som anges i projektfilen till rätt värden för målmiljön. Ange SQLCMD-variabelvärdena under distributionen /v med hjälp av alternativet i kommandoradsverktyget SqlPackage . Följande kommando anger till exempel variabeln WorldWideImporters till WorldWideImporters och variabeln WWIServer till localhost:
sqlpackage /Action:Publish /SourceFile:AdventureWorks.dacpac /TargetConnectionString:{connection_string_here} /v:WorldWideImporters=WorldWideImporters /v:WWIServer=localhost