web-dev-qa-db-ja.com

VerifyExtractionなしでMSSQLServerデータベースを.dacpacとして抽出する方法は?

Server Management Studioを使用してMSSQLServerデータベースのデータベーススキーマを抽出したい。抽出コマンド「データ層アプリケーションの抽出」を使用します。

データベースには、別のデータベースへのいくつかの参照があります。このため、次のエラーが発生します。

データベースの抽出エラー:データパッケージのスキーマモデルの検証に失敗しました。エラーSQL71562:要素[dbo]。[x]にはオブジェクト[dbo]。[y]への未解決の参照があります。外部参照はサポートされていません。このプラットフォームからパッケージを作成するとき。

問題は、SSMSがパラメーター/ p:VerifyExtraction = TrueでSQLPackage.exeを使用することです。コンソールを使用してこのパラメーターなしでSQLPackage.exeを呼び出すと、デフォルトで/ p:VerifyExtraction = Falseが使用され、 .dacpacファイルを作成できます。

検証を無効にするようにSSMSを構成する方法はありますか?

21
Michi-2142

SSMS(2008 R2または2012)で動作するメソッドも見つかりませんでしたが、SSDTを使用したVisual Studio(2013)は動作しているようです:VS内でSQL Serverオブジェクトエクスプローラーに移動し、問題のサーバーに接続、問題のデータベース、データ層アプリケーションの抽出を右クリックして、抽出設定を調整します。抽出設定の1つは「抽出の検証」です。 MSがそれをSSMSに組み込むだけではない理由はわかりません。

ただし、これから気づいたのは、VSがこのメソッドを介して.DacPacのみを抽出することです。抽出にデータを追加することを選択した場合でも、拡張子は.DacPacです。 .DacPacsはSchema Only専用であり、.BacPacsはSchema + Data専用であるという印象を受けました。とにかく、VSが.DacPac(スキーマ+データ)ファイルを作成した後、SSMSは「データ層アプリケーションのデプロイ...」ウィザードを使用してそれを正常にインポートできました。

42
Jon

Visual Studioを使用できない場合は、コマンドラインSqlPackageアプリケーションを使用して、データベースからスキーマを抽出できます。デフォルトでは、このはスキーマを検証しません(いいえ、SSMSとコマンドラインサービスが異なるデフォルトを持っている理由がわかりません!)。 _SqlPackage.exe_はC:\Program Files (x86)\Microsoft SQL Server\<SQL_VERSION>\DAC\binにあります。

たとえば、次は、ローカルSQL ServerインスタンスからMyDatabaseのスキーマを抽出し、ローカルファイルシステム上の_.dacpac_ファイルに出力します。

_sqlpackage /Action:Extract /SourceDatabaseName:"MyDatabase" /SourceServerName:localhost /TargetFile:"C:\SomeDirectory\MyDatabase.dacpac"
_

後の段階でスキーマ検証を含める場合は、コマンドラインに_/p:VerifyExtraction=True_を追加して、フラグを明示的に設定できます。

_SqlPackage.exe_に関する完全な情報はここにあります:

https://msdn.Microsoft.com/library/hh550080.aspx

21
Dave R.