次の方法で共有


SQL プロジェクト パッケージ参照

適用対象: SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric SQL Database

SQL プロジェクトのパッケージ参照を使用すると、他のプロジェクトまたは NuGet パッケージからデータベース オブジェクトを参照できます。 パッケージ参照を使用してプロジェクトに追加されるデータベース オブジェクトは、同じデータベース、同じサーバーにある別のデータベース、別のサーバーにある別のデータベースの一部になることがあります。

パッケージ参照は、新しい開発でデータベース オブジェクトを参照するために推奨される方法です。 NuGet パッケージの参照は、SDK スタイルの SQL プロジェクトでのみサポートされます。

データベース オブジェクトのパッケージ参照

パッケージ参照は、データベース参照として SQL プロジェクトにデータベース オブジェクトを追加するいくつかの方法の 1 つです。 パッケージ参照には、同じデータベース、同じサーバーにある別のデータベース、別のサーバーにある別のデータベースのオブジェクトを含めることがあります。 パッケージ参照はデータベースを小さくて管理しやすいプロジェクトに分割するために使用できます。これにより、反復的なローカル開発時にプロジェクトをビルドするために必要な時間を短縮できます。

データベース参照用の 2 つのパッケージと 1 つのプロジェクトを参照する SQL プロジェクトの例のスクリーンショット。

SQL プロジェクト ファイルのサンプルと構文

C# プロジェクトと同様に、パッケージ参照は .sqlproj ファイル内のエントリを介して SQL プロジェクトに追加されます。 パッケージ参照が同じサーバーにある別のデータベースにあると、<DatabaseSqlCmdVariable> 要素がパッケージ参照に含まれます。 パッケージ参照が別のサーバーにある別のデータベースにあると、<ServerSqlCmdVariable> 要素もパッケージ参照に含まれます。 同じデータベースへのパッケージ参照には、<ServerSqlCmdVariable> または <DatabaseSqlCmdVariable> の要素が含まれません。

次の例には、パッケージ内のオブジェクトが SQL プロジェクトのデータベース モデルの一部になる場合、同じデータベースのデータベース参照として Contoso.AdventureWorks.SalesLT パッケージへのパッケージ参照が含まれています。

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

次の例では、パッケージ内のオブジェクトが SQL プロジェクトのデータベース モデルの一部になるのと同じサーバー上の別のデータベース (AdventureWorks) のデータベース参照として、Contoso.AdventureWorks パッケージへのパッケージ参照が含まれています。

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

この例では、AdventureWorks .dacpac ファイルは、NuGet フィードに 1.1.0 バージョン Contoso.AdventureWorks パッケージとして発行されます。 <DatabaseSqlCmdVariable> 要素は、パッケージ内のオブジェクトが配置されているのと同じサーバー上のデータベースの名前を指定し、3 部構成の名前付けでこの参照を示すために使用されます。 SQLCMD 変数AdventureDB は、配置時にデータベース名を設定するために使用され、次のクエリ例と同様にプロジェクトで使用されます。

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

<DacpacName> 要素は、パッケージ参照の .dacpac ファイルの名前を指定します。ファイル拡張子やパスは指定しません。 <DacpacName> 要素は省略可能であり、.dacpac ファイルの名前がパッケージの名前と異なる場合にのみ必要です。

システム データベース

SQL システム データベース (mastermsdb) は、データベース参照パッケージとして NuGet.org に公開されます。 これらのパッケージにはシステム データベースのスキーマが含まれており、SQL プロジェクトでパッケージ参照として使用できます。 システム データベース パッケージは、関連付けられている SQL Server のバージョンに合わせてバージョン管理されます。 たとえば、SQL Server 2022 の master システム データベース パッケージは Microsoft.SqlServer.Dacpacs.Master バージョン 160.2.1であり、パッケージ参照として SQL プロジェクトに追加できます。

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

マイナー バージョンの変更には、SQL Server バージョン内のスキーマに対するバグ修正と軽微な変更が反映されます。

利用可能なシステム データベース パッケージは次のとおりです。

dacpac NuGet パッケージをパッケージ化する

データベース参照パッケージは、.dacpac ファイルを含む NuGet パッケージです。 NuGet パッケージは、SQL プロジェクトで使用するために NuGet フィード (Azure Artifacts など) に発行できます。 このパッケージの作成は、他の種類のプロジェクト用に NuGet パッケージを作成する場合と同じプロセスに従います。 詳細については、「dotnet CLI を使用してパッケージの作成」を参照してください。

SQL プロジェクト プロセスのパッケージ 参照の概要におけるスクリーンショット。

.sqlproj ファイルを NuGet パッケージとしてパッケージ化するには、コマンド ラインから dotnet pack コマンドを使用します。 既定では、dotnet pack コマンドは .sqlproj フォルダー内の bin/Debug ファイルから NuGet パッケージを作成します。

パッケージ メタデータは、<PropertyGroup> ファイル内の .sqlproj 要素内のプロパティで指定することができます。 たとえば、次のプロパティはパッケージ ID、バージョン、説明、作成者、会社を指定します。

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

.nupkg コマンドによって作成された dotnet pack ファイルは、SQL プロジェクトで使用するために NuGet フィードに発行できます。 これらのデータベース オブジェクトは、パッケージへのアクセス権を持つすべてのユーザーが表示できるため、パブリック またはプライベート フィードの場所を選択する際に考慮する必要があります。 詳細については、「プライベート パッケージ フィードでホスティング」を参照してください。

PackageId.dacpac ファイルの名前と異なるパッケージを参照する場合は、パッケージを使用するときにパッケージ参照に <DacpacName> 要素が必要です。

拡張コード分析規則パッケージ参照

パッケージ参照を使用して、コード分析機能拡張 の一部として開発されたコード分析規則参照することもできます。 コード分析規則パッケージのパッケージ参照は、データベース オブジェクト パッケージのパッケージ参照に似ています。 次の例は、カスタム コード分析ルール パッケージへのパッケージ参照を示しています。

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

参照されているパッケージは、NuGet.org、Azure Artifacts、ローカル ソースなど、NuGet フィードで使用できる必要があります。 コード分析ルールを含むパッケージが参照されると、規則は SQL プロジェクトに自動的に含まれるので、プロジェクト プロパティ RunSqlCodeAnalysis が true に設定されると評価されます。 ルールを無効または昇格して、プロジェクトのプロパティでエラーを個別に返すことができます。