SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Dev Container を使用して SqlPackage の実行環境を作成する

leave a comment

SQL Server ベースの環境に対しての CI/CD で活用できるツールとして SqlPackage があります。

Visual Studio Code の Dev Container (開発コンテナー) 上に SqlPackage の実行環境を作成しようかなと思って試してみました。

SqlPackage に問題がある場合は DacFx のリポジトリ から Issue で報告ができます。

Dev Container を使用した環境の構築

使用するイメージ

Dev Container の初期状態で利用可能なテンプレートは Available Dev Container Templates で公開されていますが、今回は Ubuntu のイメージを使用しています。

現時点の Ubuntu のイメージは 22.04.4 LTS が使用されていますので、各種インストールはこのバージョンに合わせて実行していきます。

 

SqlPackage のインストール

今回、SqlPackage をインストールして実施したいのが次のようとなります。

  1. 接続対象として指定した SQL Server ベースの環境で、オブジェクト単位で DDL のスクリプトを作成
  2. SDK スタイルのデータベースプロジェクトをビルドして dacpac を作成
  3. 作成した dacpac を使用して増分スクリプトを作成

SqlPackage はリリースされた当初は「/Action:Extract」(抽出) は「DACPAC」のみサポートしていましたが、19.1 SqlPackage から 「/p:ExtractTarget」をサポートし、SQL ファイルへの出力が可能となりました。

細かなスクリプト生成のオプションを指定する必要のある場合は、SMO を使用したスクリプト作成 の使用を検討する必要がありますが、データベース全体の基本的なスクリプト化であれば、SqlPackage でも対応することができそうです。

SqlPackage のインストールについては次のコマンドで実行可能です。

sudo apt-get update && sudo apt-get install -y dotnet-sdk-8.0

dotnet new install Microsoft.Build.Sql.Templates
dotnet tool install -g microsoft.sqlpackage

 

インストールの方法は、 インストール、クロスプラットフォーム に記載されています。

最終的に SDK スタイルのデータベースプロジェクトのビルドも実行したいため、.NET SDK のインストールで SqlPackage を使用できるようにしています。

.NET SDK のインストールが完了すると、次のコマンドでデータベースプロジェクトを作成することができます。

dotnet new sqlproj -n dbproject -tp Sql160

作成したデータベースプロジェクトに次のコマンドを実行して、DDL の出力を行います。

constring="<接続文字列>"

cd dbproject
~/.dotnet/tools/sqlpackage /action:extract /targetfile:./ddl /scs:$constring /p:extracttarget=schemaobjecttype

 

データベースプロジェクトに追加された DDL を使用して、次のコマンドで dacpac にビルドします。

dotnet build

 

データベースプロジェクト内のファイルで作成された dacpac については、次のようなコマンドを使用することで、増分スクリプトを作成することができます。

~/.dotnet/tools/sqlpackage /action:script /sf:./bin/Debug/dbproject.dacpac /tcs:$constring /OutputPath:out.sql /p:ScriptDatabaseOptions=False
cat ./out.sql

 

このような流れが実行できると、SqlPackage を使用したデータベースプロジェクトの利用を確認することができるのではないでしょうか。

今回使用したスクリプトの全体はこちらになります。

sudo apt-get update && sudo apt-get install -y dotnet-sdk-8.0

dotnet new install Microsoft.Build.Sql.Templates
dotnet tool install -g microsoft.sqlpackage

dotnet new sqlproj -n dbproject -tp Sql160

constring="<接続文字列>"

cd dbproject
~/.dotnet/tools/sqlpackage /action:extract /targetfile:./ddl /scs:$constring /p:extracttarget=schemaobjecttype

dotnet build

~/.dotnet/tools/sqlpackage /action:script /sf:./bin/Debug/dbproject.dacpac /tcs:$constring /OutputPath:out.sql /p:ScriptDatabaseOptions=False
cat ./out.sql

Share

Written by Masayuki.Ozawa

5月 20th, 2024 at 12:14 am

Posted in SQL Server

Tagged with

Leave a Reply