既存のファイルを SQL プロジェクトに追加する

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

概念として、SQL プロジェクトを作成したら、オブジェクトを一度に 1 つずつ、または一括で追加できます。 オブジェクトを一度に 1 つずつ追加するのは簡単ですが、オブジェクトを一括で追加する場合は、.dacpac ファイルあるいは 1 つまたは複数の SQL スクリプトの内容から行います。 この記事では、dacpac または SQL スクリプトの内容を SQL プロジェクトに追加する方法と、ソース間のトレードオフについて説明します。

.dacpac ファイルからインポートする

.dacpac ファイルはコンパイル済みのデータベース モデルであり、ファイルの読み取りと適用には特定のツールが必要です。 .dacpac ファイルは、SQL プロジェクトのビルド成果物として生成されることもあれば、既存のデータベースから生成されることもあります。また、ソースにアクセスできない場合でも、ファイルが提供される場合もあります。 .dacpac をデータベースに適用できる多くのツールに加えて、Visual Studio の SQL Server Data Tools (SSDT) では、.dacpac ファイルの内容をプロジェクトに直接インポートできます。 データベースや .dacpac ファイルからスキーマをインポートする機能を使用できるのは、プロジェクト内でスキーマ オブジェクトが定義されていない場合のみです。

Visual Studio SSDT の SQL プロジェクトでインポートする際のメニューのスクリーンショット

インポート時に、オブジェクトの定義は、SSDT の新しいオブジェクトに対する組織の既定の設定に基づいて、プロジェクトファイル内にスクリプトとして記述されます。新しいオブジェクトには、トップ レベル オブジェクト用の新しいファイル、親と同じファイルで定義された階層の子、可能な場合はインラインで定義されたテーブル/列の制約が含まれます。 各オブジェクトの表示設定と制御に対象に絞る場合は、[インポート] ではなく [スキーマ比較] を使用してください。 インポート ソースに配置前スクリプトと配置後スクリプト、RefactorLogs、または SQLCMD 変数の定義が含まれている場合、これらはプロジェクトにインポートされます。 これらの成果物のいずれかが既にプロジェクトに含まれている場合、インポートされたファイルは、プロジェクトの「インポート時に無視」フォルダーに追加されます。

Visual Studio と SQL Server Data Tools を使用できない場合は、次のいずれかを実行してください。

  • Azure Data Studio の Schema Compare 拡張機能を使用して、.dacpac ファイルの内容をプロジェクトと比較し、変更をプロジェクトに選択的に適用します。
  • SqlPackage コマンドライン ユーティリティを使用して、.dacpac ファイルの内容をデータベースにインポートし、データベースからプロジェクトを作成します

SQL スクリプトからインポートする

T-SQL スクリプトを SQL プロジェクトにインポートするには、スクリプト ファイルをプロジェクト ディレクトリに追加するか、Visual Studio でスクリプトの内容を処理するという 2 つの方法があります。 選択する方法は、プロジェクト タイプと、インポート プロセスに対する必要な制御レベルによって異なります。 どちらの場合も、スクリプト ファイルの構文は有効である必要があります。

プロジェクトにファイルを追加する

SDK スタイルの SQL プロジェクトでは、Microsoft.Build.Sql によってプロジェクト内のすべての *.sql ファイルが自動的に含められるため、既存の SQL スクリプトをプロジェクト ディレクトリに配置することでプロジェクトに追加することができます。 SDK スタイル以外のプロジェクトを使用している場合は、Visual Studio のスクリプト処理を利用して、既存の SQL スクリプトをプロジェクトにインポートする必要があります。 プロジェクトに自動的に含まれる *.sql ファイルは、SQL オブジェクトとしてデータベース モデル ビルドに含まれます。

プロジェクトに既に存在するオブジェクトと重複するオブジェクト定義を含むファイルをプロジェクト フォルダーに追加すると、プロジェクトのビルドが失敗します。 重複するオブジェクトを削除するか、いずれかのオブジェクトの名前を変更して、競合を手動で解決する必要があります。

ファイルを配置前/配置後スクリプトとしてプロジェクトに追加するには、そのファイルをプロジェクト ディレクトリに追加するだけでなく、プロジェクト ファイルにも含める必要があります。 たとえば、Pre-DeploymentScript.sql という名前のファイルを配置前スクリプトとして追加するには、プロジェクト ファイルに次のコード追加します。

<ItemGroup>
  <PreDeploy Include="Pre-DeploymentScript.sql" />
</ItemGroup>

配置前/配置後スクリプトの詳細については、SQL プロジェクトのドキュメントに関するページを参照してください。

ファイルの内容を処理する

Visual Studio の SQL Server Data Tools (SSDT) には、SQL スクリプトの内容を元のスタイルのプロジェクトに追加しながら処理する機能もあります。 この処理中、スクリプトにプロジェクトで定義済みのオブジェクトが含まれている場合は、そのオブジェクトの定義はスクリプトと一致するように更新されます。 スクリプトにプロジェクトでまだ定義されていないオブジェクトが含まれている場合は、そのオブジェクトに対して新しいファイルが作成されます。

スクリプト処理中に、制約や暗号化キーに関する重複したステートメントが生成されるという既知の問題があります。 これらの問題が発生した場合は、ビルドの出力ウィンドウで重複の原因を特定し、プロジェクトから重複を手動で削除します。

スクリプトからのインポート処理では、配置前スクリプトと配置後スクリプト、SQLCMD 変数、または RefactorLog ファイルが組み込まれることはありません。 インポート時に検出された、これらのコンストラクトやその他のサポートされていないコンストラクトは、プロジェクトの Scripts フォルダー内の ScriptsIgnoredOnImport.sql ファイルに配置されます。