SSDTデプロイから特定のテーブルを除外する


11

スキーマにすべてが含まれている既存のデータベースがありますdbo。スキーマを使用して追加するオブジェクトを含むSSDTプロジェクトがありますfoo

プロジェクトに次のようなテーブルがあります。

CREATE table foo.a (
    id INT NOT NULL
        CONSTRAINT [PK_foo_a] PRIMARY KEY CLUSTERED
        CONSTRAINT [FK_foo_a] FOREIGN KEY REFERENCES [dbo].[a],
    desc NVARCHAR(50) NOT NULL
)

dbo.aに依存します。dbo.aには、他の列への外部キーである多くの列があります。他の誰か(デフォルトのスキーマを維持している人)がdbo.aを変更する可能性があります。

私はdbo.aを次のように単純に保存したいと思います:

CREATE table dbo.a (
    id INT NOT NULL
        CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
)

したがって、内部的にビルドされますが、デプロイされません。それは可能ですか?


デプロイにスキーマ比較を使用しませんか?変更が検出されたら、リストからそのテーブルのチェックを外すだけです。
Dave、

私は早朝にスキーマ比較を行っていますが、ラップトップから開発サーバーまでは、実際のパブリッシュデプロイを行いません。
Justin Dearing 2015

回答:


11

AgileSqlClub SqlPackageデプロイメントフィルターを使用できます。

Ed Elliottによるオリジナルの記事から簡単な説明:

  1. agilesqlclub.codeplex.comからフィルターをダウンロードします
  2. DLL同じフォルダに入れますsqlpackage.exe
  3. 次のコマンドラインパラメータをデプロイメントに追加します。

    /p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreSchema(BLAH)"

    これにより、BLAHスキーマ内の何も展開、削除、または変更されません。

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


foo.publish.xmlファイルを介してdevenv.exeからデプロイすると、sqlpackage.exeが生成されません。それを行う方法はありますか?
Justin Dearing 2015

私がやっていることは、devenvを使用して変更をデプロイするのではなく、代わりにプロジェクトをビルドしてスクリプトを使用してsqlpackage.exeを実行することです。あなたのciプロセスで!
Ed Elliott

これは私にとって大きな助けでした。特定のスキーマのみをデプロイする必要がありました。今後の注意点として、ignoreschemaメソッドは正規表現IgnoreSchema(^(?!\ b(?i)BLAH \ b)。*)を
取り込んで

3

データベースの一部のみを管理することSSDTは困難です。依存関係がない場合は、オブジェクトを削除しないようにして、プロジェクトに含めないようにするだけです。依存関係はありますが、それらを管理したくないので、システムをだます必要があると思います。

一つの方法が思い浮かびます、私は今それらをテストする能力を持っていません、そして私はこれに「類似した」方法だけを使いました、これは正確にこれではありません。

オプション1:

  1. で新しいデータベースプロジェクトを作成しますdbo.a

  2. 3部構成の名前でテーブルを参照します。名前の最初の部分には、SQLCMD変数を使用します。例えば[$(DatabaseName)].dbo.a.

  3. fooデータベースをデプロイしないでください。

  4. パブリッシュファイルまたはCLIインターフェイスを介して$(DatabaseName)、実際のデータベースと同じ名前にします。


これを試してみる
Justin Dearing '08 / 08/13

@JustinDearing展開フィルターメソッドを使用します。これは、ユースケースに完全に適合します(つまり、すべてのテーブルをソース管理に保持し、展開時に一部を無視します)
Ed Elliott

0

これを行う「クリーンな」組み込みの方法(2016年時点)は、保存されたスキーマ比較ファイルを使用することです。あなたはできる:

  1. スキーマ比較を実行し(データベースプロジェクト->ターゲットサーバーから)、更新から除外するオブジェクトのチェックを外します。
  2. スキーマ比較を* .scmpファイルに保存します。
  3. .scmpファイルをコピーして貼り付け、必要に応じてさまざまな環境のバージョンを作成し、XMLエディターで編集してソース(出力dacpacファイルのビルドをポイントする)や接続などを変更するか、セクションの項目を手動で追加/変更することもできます。
  4. パブリッシュに適切な.scmpファイルを使用するように、dacpacデプロイメント/パブリッシュコマンドのパラメーターを構成します。例:SqlPackage.exe / Action:publish /SourceFile:c:\project\schema_compare.scmp

詳細はこちら:https : //devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.