1

データベースとソース管理への変更を管理するためのソリューションに、ビジュアル スタジオ データベース プロジェクトがあります。

次のように、Script.PostDeployment.sql で実行するプロジェクトの Scripts/Post-Deployment フォルダーの下に、各テーブルのスクリプトがあります。

:r .\Data.Script1.sql
:r .\Data.Script2.sql
....

これらのスクリプトは、"Insert Into tablename..." ステートメントを使用して、ルックアップ テーブルなどの必要なデータを入力します。

私が直面している問題は次のとおりです。

  1. 上記の例で、データベースが既に存在するために Script1 が失敗し、データのスペル ミスを修正するなどの構造のマイナーな変更のために再デプロイしている場合、残りのバッチも中止されます。
  2. INSERT INTO ステートメントの変更は反映されません。これは、既存のデータベースにデプロイするときに、Data.*.sql ファイルの最初のステートメントがその行が既に存在するために失敗するためです。

Visual Studio データベース プロジェクトで既存のデータベースのデータを比較し、行が既に存在するかどうかに基づいて挿入または更新を使用する方法はありますか?

ご意見ありがとうございます

4

2 に答える 2

1

Data.*.sql ファイルでは、INSERT INTO ステートメントの代わりに MERGE INTO を使用する必要があります。

詳細については、この MSDN の記事を参照してください

于 2013-08-11T12:21:37.423 に答える
0

あなたが概説した問題は、liquibaseflywayなどの移行ツールによって解決されます。データベースにすでに適用されている移行が記録されるため、特定のリリースの新しい変更のみが実行されます。

同様のツールが他の言語にも存在します。個人的には、コマンドライン モード (Java 以外のプロジェクト用) で使用し、アプリケーション コードに統合したliquibaseをお勧めします。

于 2013-08-08T21:18:28.123 に答える