21

Visual Studio 2013 を使用して、データベース スキーマを含む .sqlproj ファイルを管理しています。スキーマは何十回も正常に展開されています。

1 つの特定のターゲット データベースに公開しようとすると、「公開プレビューの作成」手順が失敗したように見えますが、エラーは発生しません。プレビューからの出力には、予想される警告がいくつか含まれています。

  • 列 {...} は削除されています。データが失われる可能性があります
  • このデプロイを実行すると、{...} を変更すると、{...} で実行時エラーが発生する可能性があります
  • {...} への変更はターゲット データベース内の {...} の依存関係によってブロックされるため、このデプロイでは実行中にエラーが発生する可能性があります。

「データ損失が発生する可能性がある場合、増分展開をブロックする」のチェックを外しました。

プレビューが停止するだけで、スクリプトは生成されません。

4

4 に答える 4

31

これは、sqlproj を展開することによって変更されるテーブルを参照する、sqlproj に含まれていないストアド プロシージャ (またはビュー、制約、またはその他のオブジェクト) がターゲット データベースに存在する場合に発生します。SSDT は、参照しているものが sqlproj に含まれていない限り、変更が安全かどうかを判断できないようです。その後、展開をブロックすることで安全側でエラーが発生します。

[データ損失が発生する可能性がある場合は増分展開をブロックする] オプションを無効にすると、データ損失チェックが緩和されるだけです。「実行時エラーが発生する可能性がある場合、増分展開をブロックする」オプションはありません。

次の 3 つのオプションがあります。

  1. ストアド プロシージャ、ビュー、またはターゲット データベースのあらゆるものを sqlproj に追加します。

  2. ssdt パブリッシュ オプションの [Verify Deployment] オプションのチェックを外します (これは、他の参照 sproc を認識しており、それらが壊れないことがわかっている場合を除き、危険です)。

  3. ターゲット データベースに存在する必要があるすべてのものが sqlproj に含まれていることが確実な場合は、[オブジェクトをターゲットにドロップするがソースにはドロップしない] オプションを有効にすることができます。

于 2015-09-26T01:29:49.970 に答える
1

この問題は、データベース オブジェクトの先頭に間違ったスキーマを追加した場合にも発生する可能性があります。たとえば、ストアド プロシージャの SQL ステートメント内でテーブルが参照されていて、そのテーブルの先頭に不適切なスキーマ名が付加されている場合などです。

さらに、ソリューションを削除すると再びビルドされる特定のセキュリティ グループに対するいくつかのアクセス許可がありました。エラーをトラブルシューティングするには、プロジェクト コードとターゲット データベースのスキーマ比較を実行します。パブリッシュ機能が動作するまで、データベースから差異を削除します。データベースから最後に削除したアイテムが犯人です。

于 2019-02-28T16:40:28.633 に答える
0

最後の警告パターンは警告以上のもののようです:

{...} への変更はターゲット データベース内の {...} の依存関係によってブロックされるため、このデプロイでは実行中にエラーが発生する可能性があります。

プレビューの残りの部分とスクリプトの生成を停止する原因となったようです。

興味深いことに、導入されたスキーマの変更によって、プレビュー出力で参照されているトリガーが壊れることはありませんでした。

于 2015-02-19T22:37:16.070 に答える
0

ビューからスキーマ バインディングを削除すると、発行が成功し、警告のみが表示されます

于 2021-07-07T13:06:30.797 に答える