元の SQL プロジェクトを SDK スタイルのプロジェクトに変換する

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL データベース

新しい SDK スタイルの SQL プロジェクトの作成は、クイック タスクです。 しかし、既存のSQLプロジェクトがある場合は、それらをSDKスタイルのSQLプロジェクトに変換して新機能を活用できます。

プロジェクトを変換した後、SDKスタイルのプロジェクトの新機能、例えば以下のようなものを利用できます。

  • クロスプラットフォームビルドサポート
  • 簡略化されたプロジェクトファイル形式
  • パッケージ参照

換算を慎重に完了するには、以下の手順に従ってください:

  1. 元のプロジェクト ファイルのバックアップを作成します。
  2. 比較のために、元のプロジェクトから .dacpac ファイルをビルドします。
  3. プロジェクト ファイルを SDK スタイルのプロジェクトに変更します。
  4. 比較のために、変更したプロジェクトから .dacpac ファイルをビルドします。
  5. .dacpac ファイルが同じであることを確認します。

Visual StudioのSQL Server Data Tools(SSDT)はSDKスタイルのプロジェクトをサポートしていません。 プロジェクトを変換した後は、以下のいずれかのツールを使ってプロジェクトを作成または編集してください。

  • Visual Studio CodeのSQL Database Projects拡張
  • SQL Server Management Studio (SSMS) におけるデータベース DevOps
  • コマンド ライン
  • SQL Server Data Tools、Visual Studio 2022におけるSDKスタイル(プレビュー)

Note

SQL プロジェクトに、これらの手順を超えて必要な変更を拡張するカスタマイズが含まれている場合があります。 この記事に加えて、 DacFx GitHub リポジトリ を使用して、元の SQL プロジェクトから SDK スタイルの SQL プロジェクトにアップグレードするために必要な変更を理解できます。

Prerequisites

手順 1: 元のプロジェクト ファイルのバックアップを作成する

プロジェクトを変換する前に、元のプロジェクト ファイルのバックアップを作成します。 これにより、必要に応じて元のプロジェクトに戻すことができます。

ファイルエクスプローラーで、変換したいプロジェクトの .sqlproj ファイルのコピーを作成し、拡張子に .original 付けしてください。 たとえば、MyProject.sqlprojMyProject.sqlproj.originalになります。

手順 2: 比較のために、元のプロジェクトから .dacpac ファイルをビルドする

Visual Studio でプロジェクトを開きます。 .sqlproj ファイルは元の形式のままであるため、元の SQL Server Data Tools で開きます。

Visual Studio でプロジェクトをビルドするには、ソリューション エクスプローラーのデータベース ノードを右クリックし、[ビルド] を選択します。

元のプロジェクトから .dacpac ファイルをビルドするには、Visual Studio で元の SQL Server Data Tools (SSDT) を使用する必要があります。 元の SQL Server Data Tools がインストールされている Visual Studio でプロジェクト ファイルを開きます。

Visual Studio でプロジェクトをビルドするには、ソリューション エクスプローラーのデータベース ノードを右クリックし、[ビルド] を選択します。

Visual Studio Code でプロジェクト フォルダーを開きます。 Visual Studio Code の [データベース プロジェクト] ビューで、プロジェクト ノードを右クリックし、[ ビルド] を選択します。

元のプロジェクトから .dacpac ファイルをビルドするには、Visual Studio で元の SQL Server Data Tools (SSDT) を使用する必要があります。 元の SQL Server Data Tools がインストールされている Visual Studio でプロジェクト ファイルを開きます。

Visual Studio でプロジェクトをビルドするには、ソリューション エクスプローラーのデータベース ノードを右クリックし、[ビルド] を選択します。

dotnet build コマンドを使用して、コマンド ラインから SQL データベース プロジェクトをビルドできます。

dotnet build

# optionally specify the project file
dotnet build MyDatabaseProject.sqlproj

ビルド プロセスでは、既定でプロジェクトの .dacpac フォルダーに bin\Debug ファイルが作成されます。 ファイルエクスプローラーを使って、ビルドプロセスで作成された .dacpac を見つけて、プロジェクトディレクトリ外の新しいフォルダにコピーします original_project.dacpac。 この .dacpac ファイルを比較に使って、後でコンバージョンを検証してください。

手順 3: プロジェクト ファイルを SDK スタイルのプロジェクトに変更する

プロジェクト ファイルの変更は手動プロセスであり、テキスト エディターで最適に実行されます。 テキスト エディターの .sqlproj ファイルを開き、次の変更を加えます。

必須: SDK 参照を追加する

プロジェクト要素内に、Microsoft.Build.Sql を参照する Sdk 項目と、次のスニペットに https://www.nuget.org/packages/Microsoft.build.sql が含まれている #.#.# の最新バージョンを追加します。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0">
  <Sdk Name="Microsoft.Build.Sql" Version="#.#.#" />
...

必須: 不要なビルド ターゲットのインポートを削除する

元の SQL プロジェクトは、インポート ステートメントで複数のビルド ターゲットとプロパティを参照します。 明示的に追加した <Import/> 項目 (一意で意図的な変更) を除き、<Import ...> で始まる行を削除します。 .sqlproj に存在する場合に削除する例:

...
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Import Condition="..." Project="...\Microsoft.Data.Tools.Schema.SqlTasks.targets"/>
<Import Condition="'$(SQLDBExtensionsRefPath)' != ''" Project="$(SQLDBExtensionsRefPath)\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
...

必須: プロパティ フォルダーを削除する

元の SQL プロジェクトには、ソリューション エクスプローラーのプロジェクト プロパティへのアクセスを表した Properties フォルダーのエントリがあります。 この項目をプロジェクトファイルから削除してください。

.sqlproj に存在する場合に削除する例:

<ItemGroup>
  <Folder Include="Properties" />
</ItemGroup>

必須: 既定で含まれているビルド項目を削除する

元の SQL プロジェクトでは、プロジェクト ファイル内のデータベース オブジェクトを明示的に表す .sql ファイルがすべて <Build Include="..." /> 項目として一覧表示されます。 SDKスタイルのSQLプロジェクトでは、プロジェクトフォルダツリー(.sql)内の**/*.sqlファイルはデフォルトで含まれています。 ビルド パフォーマンスの問題を回避するため、それらのファイルに対する <Build Include="...." /> 項目で指定された .sql ファイルを削除してください。

プロジェクトファイルから次のような行を削除してください:

  <Build Include="SalesLT/Products.sql" />
  <Build Include="SalesLT/SalesLT.sql" />
  <Build Include="SalesLT/Categories.sql" />
  <Build Include="SalesLT/CategoriesProductCount.sql" />

削除しないでください:

  • <Build Include="..." /> SQLプロジェクトフォルダツリーに含まれていない .sql ファイルのアイテム
  • <PreDeploy Include="..." /> または <PostDeploy Include="..." /> 項目を扱う場合もあります。これらのノードはそれらのファイルの 特定の動作 を指示します
  • .sqlファイルではない項目、例えば.publish.xmlアイテムの<None Include="..." />ファイル、.refactorlog.xmlアイテムの<RefactorLog Include="..." />ファイル、.xsdアイテムの<Build Include="..." />ファイルなど

省略可能: SSDT 参照を削除する

元の SQL Server Data Tools (SSDT) では、Visual Studio のインストールを検出するために、プロジェクト ファイルに追加のコンテンツが必要です。 これらの行は、SDK スタイルの SQL プロジェクトでは不要であり、削除できます。

  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
    <!-- Default to the v11.0 targets path if the targets file for the current VS version is not found -->
    <SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists>
    <VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion>
  </PropertyGroup>

省略可能: 既定のビルド設定を削除する

オリジナルのSQLプロジェクトには、リリース設定とデバッグビルド設定用の大きなブロックが2つありますが、SDKスタイルのSQLプロジェクトではSDKがこれらのオプションのデフォルトを把握しています。 ビルド設定のカスタマイズがない場合は、次のブロックを削除することを検討してください。

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <OutputPath>bin\Release\</OutputPath>
    <BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
    <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <DefineDebug>false</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <OutputPath>bin\Debug\</OutputPath>
    <BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>

プロジェクトのプロパティ参照 には、使用可能なプロパティとその既定値が一覧表示されています。

手順 4: ソリューション ファイル

プロジェクト ファイルがソリューション ファイル (.sln) で参照されている可能性があります。 解答ファイルがあれば、新しいSDKスタイルのプロジェクトファイルを参照するように更新してください。 ソリューション ファイルがない場合は、このセクションをスキップして手順 5 に進むことができます。

オプション 1: 新しいソリューション ファイルを作成する

ソリューションファイルにSQLプロジェクトのみが含まれている場合は、ソリューションファイルを削除してSDKスタイルのプロジェクトで新しいソリューションファイルを作成する方が簡単です。

dotnet new sln --name MySolution
dotnet sln MySolution.sln add MyDatabaseProject\MyDatabaseProject.sqlproj

オプション 2: ソリューション ファイルを編集する

解決策ファイルに複数のプロジェクトが含まれている場合は、新しいSDKスタイルのプロジェクトファイルを参照するように更新してください。 テキスト エディターでソリューション ファイルを編集し、プロジェクト参照を新しい SDK スタイルのプロジェクト ファイルに変更できます。 ソリューション ファイル内のプロジェクト参照は次のようになります。

Project("{PROJECT_TYPE_GUID}") = "MyDatabaseProject", "MyDatabaseProject\MyDatabaseProject.sqlproj", "{PROJECT_GUID}"
EndProject

Microsoft.Build.Sql プロジェクトの PROJECT_TYPE_GUID の値は 42EA0DBD-9CF1-443E-919E-BE9C484E4577 です。 PROJECT_GUIDは、プロジェクト ファイルの<ProjectGuid>要素内にある、プロジェクトの一意の識別子です。 プロジェクトに解決策ファイルがあれば、 PROJECT_GUID 値を変更する必要はありません。 PROJECT_TYPE_GUID の値を Microsoft.Build.Sql プロジェクトの種類 GUID に変更してください。

手順 5: 変更したプロジェクトから .dacpac ファイルをビルドして比較する

SQL プロジェクトは Visual Studio 2022 と互換性がなくなりました。 プロジェクトの作成や編集を行うには、以下のいずれかのオプションを使用します。

  • コマンド ライン
  • Visual Studio CodeのSQL Database Projects拡張
  • SQL Server Data Tools、Visual Studio 2022におけるSDKスタイル(プレビュー)
  • データベース DevOps ワークロードを使用した SQL Server Management Studio (SSMS) (プレビュー)

プロジェクト ファイルは SDK 形式になりましたが、Visual Studio 2022 で開くには、SQL Server Data Tools SDK スタイル (プレビュー) がインストールされている必要があります。 SQL Server Data Tools、SDK スタイル (プレビュー) がインストールされている Visual Studio 2022 でプロジェクトを開きます。

Visual Studio Code でプロジェクト フォルダーを開きます。 Visual Studio Code の [データベース プロジェクト] ビューで、プロジェクト ノードを右クリックし、[ ビルド] を選択します。

データベース DevOps ワークロード (プレビュー) がインストールされている SQL Server Management Studio (SSMS) でプロジェクト ファイルを開きます。 オブジェクト エクスプローラーで、データベース プロジェクトを右クリックし、[ ビルド] を選択します。

dotnet build コマンドを使用して、コマンド ラインから SQL データベース プロジェクトをビルドできます。

dotnet build

# optionally specify the project file
dotnet build MyDatabaseProject.sqlproj

ビルド プロセスでは、既定でプロジェクトの .dacpac フォルダーに bin\Debug ファイルが作成されます。 ファイルエクスプローラーを使って、ビルドプロセスによって作成された .dacpac を見つけて、プロジェクトディレクトリ外の新しいフォルダにコピーします。 この .dacpac ファイルを比較に使って、後でコンバージョンを検証してください。

手順 6: .dacpac ファイルが同じであることを確認する

変換が成功したことを確認するには、元のプロジェクトと変更されたプロジェクトから作成された .dacpac ファイルを比較します。 SQLプロジェクトの スキーマ比較 機能を活用して、2つの .dacpac ファイル間のデータベースモデルの違いを可視化しましょう。 または、DacpacVerify コマンドライン ユーティリティを使用して、配置前/配置後スクリプトやプロジェクト設定を含む 2 つの .dacpac ファイルを比較します。

DacpacVerifyは dotnetツールとしてインストールできます。 ツールをインストールするには、次のコマンドを実行します。

dotnet tool install --global Microsoft.DacpacVerify --prerelease

DacpacVerify の構文は、2 つの .dacpac ファイルへのファイルパスを dacpacverify <source DACPAC path> <target DACPAC path>として指定することです。 2 つの .dacpac ファイルを比較するには、次のコマンドを実行します。

DacpacVerify original_project.dacpac modified_project.dacpac

スキーマ比較ツールを使用して、 .dacpac ファイル内のオブジェクトを比較できます。

プロジェクトを読み込まずに Visual Studio を起動します。 [ツール]>[SQL Server]>[新しいスキーマ比較] に移動します。 ソースとして元の .dacpac ファイルを選択し、変更した .dacpac ファイルをターゲットとして選択します。 Visual Studio で Schema Compare を使用する方法の詳細については、「スキーマ比較を使用してさまざまなデータベース定義を比較する」を参照してください。

Visual Studio の SDK スタイルの SQL プロジェクト プレビューでは、グラフィカル スキーマの比較はまだ使用できません。 Visual Studio Code を使用してスキーマを比較します。

Visual Studio Code で、 SQL Server スキーマ比較 拡張機能がまだインストールされていない場合はインストールします。 Ctrl/Cmd+Shift+P でコマンド パレットを開き、「Schema Compare」と入力して、コマンド パレットから新しいスキーマ比較を起動します。

ソースとして元の .dacpac ファイルを選択し、変更した .dacpac ファイルをターゲットとして選択します。

グラフィカル スキーマの比較は、SQL Server Management Studio では使用できません。 Visual Studio Code または Visual Studio を使用してスキーマを比較します。

グラフィカル スキーマの比較は、Visual Studio と Visual Studio Code で使用できます。

スキーマ比較を実行しても、結果が表示されることはありません。 違いの欠如は、元のプロジェクトと変更されたプロジェクトが同等であることを示し、.dacpac ファイル内で同じデータベース モデルを生成します。

Note

スキーマ比較による .dacpac ファイルの比較では、配置前/配置後スクリプト、refactorlog、またはその他のプロジェクト設定は検証されません。 データベース モデルのみを検証します。 DacpacVerify コマンド ライン ユーティリティを使用して、2 つの .dacpac ファイルが同等であることを検証することをお勧めします。