6

SQL Server 2008 用の Visual Studio 2008 データベース プロジェクト

プロジェクトには、配置前および配置後の SQL スクリプトのプレースホルダーがあります。それらは動作します - とにかく、ほとんどの場合。

このプロジェクトには、常にデータベースを再作成するオプションがあります。既存のデータベースを削除し、毎回、オーブンから取り出したばかりの新しいデータベースを作成します。

データベースをデプロイすると、SQL スクリプト全体がまとめられて実行されます。

私のデータベースはレプリケーションに使用され、Post-Deployment スクリプトの一部として、サーバーをディストリビューションとして指定し、レプリケーションを作成して記事を追加します。

したがって、レプリケーションを停止する必要があります。そして、それを配置する論理的な場所は、展開前でした。

VS2008 は、私の顔から独善的な笑みをすぐに消し去りました。Always-Recreate-Database がオンになっている場合は、スクリプトを配置してデータベースを削除して再作成し、次に配置前スクリプトを配置し、次にその他すべてを配置します。

データベース プロジェクトのテンプレートを変更して、デプロイ前のSQL スクリプトが実行される場所で実行されるようにする方法はありますか?

4

1 に答える 1

4

これはまさにあなたが求めているものではないかもしれませんが、問題を回避するのに役立つかもしれません. ざっと見てみると、展開前スクリプトと展開後スクリプトの順序付けを変更するのは難しすぎるのではないかと思います。

私が理解しているように、ビルド プロジェクトには、展開が始まる前に独自のコードを実行できるフックがいくつかあります。

  1. PreDeployEvent.dbproj ファイルでプロパティを定義します。
  2. BeforeDeploy.dbproj ファイルでターゲットを定義します。

どちらも適切なタイミングで実行する必要があると思います。

プロパティを使用する場合は、PreDeployEvent実行する単一のコマンド ラインを指定する必要があります。大まかな例:

<PropertyGroup>
  <PreDeployEvent>sqlcmd.exe -i myscript.sql</PreDeployEvent>
</PropertyGroup>

さらに制御が必要な場合は、BeforeDeploy1 つ以上のカスタム msbuild タスクを実行できるようにするターゲットを使用します。別の大まかな例を次に示します。

<Target Name="BeforeDeploy">
  <Message Text="BeforeDeploy" Importance="high" />
</Target>

ところで、www.msbuildextensionpack.comにあるものなど、自由に利用できるカスタム タスクがたくさんあります。

于 2009-08-04T19:33:16.470 に答える