Dela via


Paketreferenser för SQL-projekt

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Med paketreferenser i SQL-projekt kan du referera till databasobjekt från andra projekt eller NuGet-paket. Databasobjekten som läggs till i ett projekt via paketreferenser kan ingå i samma databas, en annan databas på samma server eller en annan databas på en annan server.

Obs

Paketreferenser är den rekommenderade metoden för att referera till databasobjekt i ny utveckling. Att referera till NuGet-paket stöds endast i SQL-projekt i SDK-format.

Databasobjektpaketreferenser

Paketreferenser är en av flera metoder för att lägga till databasobjekt i ett SQL-projekt som en databasreferens. Paketreferenser kan innehålla objekt för samma databas, en annan databas på samma server eller en annan databas på en annan server. Paketreferenser kan användas för att dela upp en databas i mindre, mer hanterbara projekt, vilket kan bidra till att minska den tid som krävs för att skapa ett projekt under iterativ lokal utveckling.

Skärmbild av Exempel på ett SQL-projekt som refererar till två paket och ett projekt för databasreferenser.

EXEMPEL och syntax för SQL-projektfil

Paketreferenser läggs till i ett SQL-projekt via poster i .sqlproj-filen, på samma sätt som C#-projekt. När en paketreferens är till en annan databas på samma server ingår ett <DatabaseSqlCmdVariable>-element i paketreferensen. När en paketreferens är till en annan databas på en annan server ingår även ett <ServerSqlCmdVariable>-element i paketreferensen. Paketreferenser till samma databas innehåller inte <ServerSqlCmdVariable> eller <DatabaseSqlCmdVariable> element.

I följande exempel ingår en paketreferens till Contoso.AdventureWorks.SalesLT-paketet som en databasreferens för samma databas där objekten i paketet blir en del av databasmodellen i SQL-projektet:

...
  <ItemGroup>
    <PackageReference Include="Contoso.AdventureWorks.SalesLT" Version="1.1.0" />
  </ItemGroup>
</Project>

I följande exempel ingår en paketreferens till Contoso.AdventureWorks-paketet som databasreferens för en annan databas (AdventureWorks) på samma server där objekten i paketet blir en del av databasmodellen i SQL-projektet:

...
  <ItemGroup>
    <PackageReference Include="Contoso.AdventureWorks" Version="1.1.0">
      <DatabaseSqlCmdVariable>AdventureDB</DatabaseSqlCmdVariable>
      <DacpacName>AdventureWorks</DacpacName>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <SqlCmdVariable Include="AdventureDB">
      <DefaultValue>AdventureWorks</DefaultValue>
      <Value>$(SqlCmdVar__1)</Value>
    </SqlCmdVariable>
  </ItemGroup>
</Project>

I det här exemplet publiceras filen AdventureWorks .dacpac som ett paket Contoso.AdventureWorks version 1.1.0 till en NuGet-feed. Elementet <DatabaseSqlCmdVariable> anger namnet på databasen på samma server där objekten i paketet finns och används för att ange den här referensen i namngivning i tre delar. Variabeln SQLCMDAdventureDB används för att ange databasnamnet vid distributionstillfället och används i projektet på samma sätt som i den här exempelfrågan:

SELECT * FROM [$(AdventureDB)].dbo.Customers;

Elementet <DacpacName> anger namnet på den .dacpac filen för paketreferensen, utan filnamnstillägget eller sökvägen. Elementet <DacpacName> är valfritt och krävs bara när namnet på .dacpac-filen skiljer sig från namnet på paketet.

Systemdatabaser

SQL-systemdatabaserna (master, msdb) publiceras på NuGet.org som databasreferenspaket. Dessa paket innehåller schemat för systemdatabaserna och kan användas som paketreferenser i SQL-projekt. Systemdatabaspaketen har versioner så de stämmer överens med den version av SQL Server som de är associerade med. Till exempel är master-systemdatabaspaketet för SQL Server 2022 Microsoft.SqlServer.Dacpacs.Master version 160.2.1 och kan läggas till i ett SQL-projekt som en paketreferens:

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

Delversionsändringar återspeglar felkorrigeringar och mindre ändringar i schemat i en SQL Server-version.

De tillgängliga systemdatabaspaketen är:

Paket dacpac NuGet-paket

Ett databasreferenspaket är ett NuGet-paket som innehåller en .dacpac fil. NuGet-paketet kan publiceras till en NuGet-feed, till exempel Azure Artifacts, för användning i SQL-projekt. När du skapar det här paketet följer samma process som när du skapar ett NuGet-paket för andra typer av projekt. Mer information finns i Skapa ett paket med dotnet CLI-.

Skärmbild av sammanfattning av paketreferens för SQL-projektprocess.

Om du vill paketera en .sqlproj fil som ett NuGet-paket använder du kommandot dotnet pack från kommandoraden. Som standard skapar kommandot dotnet pack ett NuGet-paket från filen .sqlproj i mappen bin/Debug.

Paketmetadata kan anges av egenskaper i elementet <PropertyGroup> i .sqlproj-filen. Följande egenskaper anger till exempel paket-ID, version, beskrivning, författare och företag:

<PackageId>Contoso.AdventureWorks.SalesLT</PackageId>
<Version>1.0.0</Version>
<Description>AdventureWorks database SalesLT objects</Description>
<Authors>DevTeam</Authors>
<Company>Contoso Outdoors</Company>

Den .nupkg fil som skapats av kommandot dotnet pack kan publiceras till en NuGet-feed för användning i SQL-projekt. Dessa databasobjekt kan visas av alla som har åtkomst till paketet, så du bör överväga att välja en offentlig eller privat feedplats. Mer information finns i Hosting med privata paketfeeds.

När du refererar till ett paket där PackageId skiljer sig från namnet på filen .dacpac krävs elementet <DacpacName> i paketreferensen för att använda paketet.

Paketreferenser för utökade kodanalysregler

Paketreferenser kan också användas för att referera till fler kodanalysregler som har utvecklats som en del av utökningsbarhet för kodanalys. Paketreferensen för ett kodanalysregelpaket liknar paketreferensen för ett databasobjektpaket. I följande exempel visas en paketreferens till ett anpassat kodanalysregelpaket:

<ItemGroup>
  <PackageReference Include="Your.CustomCode.AnalysisRules" Version="1.2.3" />
</ItemGroup>

Paketet som refereras ska vara tillgängligt på en NuGet-feed, till exempel NuGet.org, Azure Artifacts eller en lokal källa. När ett paket som innehåller kodanalysregler refereras inkluderas reglerna automatiskt i SQL-projektet och utvärderas när projektegenskapen RunSqlCodeAnalysis anges till true. Reglerna kan inaktiveras eller eskaleras för att returnera ett fel var för sig i projektets egenskaper.