30

Server Management Studio で MSSQLServer データベースのデータベース スキーマを抽出したいと考えています。Extract コマンド「Extract Data-tier Application..」を使用します。

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

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

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

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

4

2 に答える 2

54

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

ただし、これを行って気付いたやや奇妙なことの 1 つは、VS がこのメソッドを介して .DacPac のみを抽出することです。抽出にデータを追加することを選択した場合でも、拡張子は .DacPac のままです。.DacPac はスキーマ専用であり、.BacPac はスキーマ + データ用であるという印象を受けました。いずれにせよ、VS が .DacPac (スキーマ + データ) ファイルを作成した後、SSMS は「データ層アプリケーションの展開...」ウィザードを使用して正常にインポートできました。

于 2015-01-15T19:31:24.490 に答える
31

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

たとえば、次の例ではMyDatabase、ローカルの SQL Server インスタンスからのスキーマを抽出し、それを.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

于 2015-06-08T14:21:40.650 に答える