web-dev-qa-db-ja.com

SSDT SQL Serverデータベースプロジェクトのスキーマ比較のコマンドライン/ APIですか?

Visual Studio 2012には Schema Compare in [〜#〜] ssdt [〜#〜]SQL Server Database Project(DbProject)に役立つプロジェクト

  1. sourcetargetを比較
  2. targetsourceと同じになるように更新します

どこ

  1. ソースとターゲットは、データベース、DbProjectプロジェクト、または.dacpacファイルのいずれかです。
  2. 更新は、更新アクションまたは生成されたスクリプトを介して実行できます

私の質問は、それが可能であり、この機能を呼び出すためのコマンドライン/ APIインターフェイスをどこで取得できるかということです。

27
Nam G VU

ソースデータベース sqlpackage.exe/a:Extract/scs:Server =%Server%; Database = AspBaselineDB; /tf:%DriveSpec%\%DacPath%\%AspBaselineDB%_baseline.dacpac

TARGETデータベース sqlpackage.exe/a:Extract/scs:Server =%Server%; Database =%AspTargetDB-2%; /tf:%DriveSpec%\%DacPath%\%AspTargetDB%.dacpac

デルタスクリプトの比較と生成 sqlpackage.exe/a:Script /sf:%DriveSpec%\%DacPath%\%AspBaselineDB%_baseline.dacpac/tf:%DriveSpec%\%DacPath%\ AspNetDb\%AspTargetDB%.dacpac/tdn:aspTargetdb /op:%DriveSpec%\%SqlPath%\AspNetDb\AspDbUpdate.sql

スクリプトを実行します sqlcmd.exe -S%Server%\ aspnetdbAmexDev -i%DriveSpec%\%SqlPath%\ AspNetDb\AspDbUpdate.sql

IT部門は署名のないPowerShellスクリプトを許可せず、証明書を購入しないため、CMDスクリプトでこれを行います。これは、TFS 2012チームビルドから呼び出す場合や、VSコマンドプロンプトから.CMDスクリプトを管理者として実行する場合でも問題なく機能します。

注意!

スクリプトに次のSETを追加します。SET PATH =%PATH%; C:\ Program Files(x86)\ Microsoft SQL Server\110\DAC\bin

また、ご覧のとおり、パス変数を設定しています。最大50種類のデータベースに触れているため、これを実行します。これは、デルタスクリプトを生成し、DEVデータベースとTESTデータベースを更新するための唯一の一貫した方法です。

41
Mike Hyde

SqlPackage を見たことがありますか?

4
JuneT

現在、スキーマ比較結果へのAPIアクセスを取得する唯一の方法は、DacServices APIのデプロイ/スクリプト操作中に実行するデプロイメントプラン修飾子/エグゼキューターを記述することです。これにより、データベースとdacpacを比較するときに生成されたデプロイメントプランを調べることができますが、スキーマ比較操作を表す ModelComparisonResult へのアクセスも提供されます。これは、-に渡されたコンテキストオブジェクトで使用できます。 OnExecute 寄稿者のメソッド。私は ブログ投稿 を書いたところです。これはこのプロセスをカバーし、あなたに役立つかもしれません。

2
Kevin Cunnane

私は 数行書いた このトピックについて少し前に。うまくいけば、あなたはそれらが役立つと思います。

一言で言えば、あなたが探しているツールはvsdbcmd.exe、これはVisual StudioのUltimateおよびPremiumバージョンによって配布されます。

1
mcabral