2

しばらくの間、Visual Studio データベース プロジェクトを使用してきましたが、展開に最適です。さまざまな環境のデータベースの現在の状態を dbschemas または dacpac ファイルとしてキャプチャすることを開始しました。これにより、他のデータベース プロジェクトでそれらを参照できるようになり、本番アクセスがなくても本番スキーマの状態を確認できるようになりました。

多くの場合、ソース管理から dbschema または dacpac を取得し、そのスキーマをローカルの SQL サーバーに作成したいと考えていますが、ほとんどの場合、ローカルではなく 1 つの環境に存在するユーザーが原因でエラーが発生します。ユーザー オブジェクト タイプを無視しても、他の何かがユーザーを参照している場合 (スキーマなど) にエラーが発生します。

このケースを処理するためにサーバー プロジェクトを作成するという提案を見てきましたが、私は開発者向けの汎用ツールを作成する任務を負っているため、このためにカスタムのものを作成したくありません。任意の dbschema または dacpac を取得して、「ベスト エフォート」でインポートできるようにしたいと考えています。

これがほとんどのシナリオで危険であることは理解していますが、ローカル データベースでは、データの損失やその他の重大なエラーが発生してもほとんど気にしません。ローカル インスタンスの dbschema で有効なオブジェクトをすばやく取得する方法が必要です。

4

1 に答える 1

0

私はあなたが扱っている正確な問題を知っています。VS2010では、dbschemaファイルを使用する場合、サーバープロジェクトを作成する以外にこれを行う方法はないと思います(あなたが言ったように)。ただし、スキーマを比較して、ユーザー/ログインを比較しないことを選択することはできます。

私は最新のプロジェクトで 2012 SSDT を使用していますが、あなたの質問を読むまでこのエラーが消えたことに気付きませんでした。既存のデータベースをインポートしたときに、ユーザーがインポートされていないようです。したがって、プロジェクトを公開すると、ユーザーはデプロイされません。ただし興味深いのは、スキーマ比較を行う場合、ユーザーを比較してデプロイするオプションがあることです。ただし、プロジェクトを介して公開する場合 (SqlProject.exe を使用して公開していると思われます)、プロジェクトに存在しないターゲットにオブジェクトをドロップするをオンにしても、ユーザーは影響を受けません。

次に、データベース プロジェクトの最新バージョン (2010 および 2012 で利用可能) にアップグレードし、プロジェクトにユーザーを含めず、SqlPackage.exe を使用して公開することをお勧めします。

これが役に立てば幸いです、マーク

于 2013-01-04T12:29:08.040 に答える