Server Management Studioを使用してMSSQLServerデータベースのデータベーススキーマを抽出したい。抽出コマンド「データ層アプリケーションの抽出」を使用します。
データベースには、別のデータベースへのいくつかの参照があります。このため、次のエラーが発生します。
データベースの抽出エラー:データパッケージのスキーマモデルの検証に失敗しました。エラーSQL71562:要素[dbo]。[x]にはオブジェクト[dbo]。[y]への未解決の参照があります。外部参照はサポートされていません。このプラットフォームからパッケージを作成するとき。
問題は、SSMSがパラメーター/ p:VerifyExtraction = TrueでSQLPackage.exeを使用することです。コンソールを使用してこのパラメーターなしでSQLPackage.exeを呼び出すと、デフォルトで/ p:VerifyExtraction = Falseが使用され、 .dacpacファイルを作成できます。
検証を無効にするようにSSMSを構成する方法はありますか?
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は「データ層アプリケーションのデプロイ...」ウィザードを使用してそれを正常にインポートできました。
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
_に関する完全な情報はここにあります: