17

Visual Studio 2013/15 で SQL Schema Compare を使用しようとしていますが、テーブルを削除から除外すると、テーブルがまったく処理されなくなるという問題が発生しています。

問題は、削除しようとしているテーブルが顧客が作成したテーブルであるため、バージョンをデータベースと同期すると、それらを削除するように求められることです。それらを削除したくはありませんが、それらのテーブルの一部には制約があるため、CCDR を試行すると、テーブルの制約のために失敗します。テーブルを追加する方法はありますか (再作成しますか?残りのテーブルと同様に?)、SQL スキーマ比較がそれらの少数のテーブルに対して既に行っていることを実行するスクリプトを各クライアントに記述しませんか?

Red-Gate の SQL Compare は何らかの方法でこれを行いますが、私たちには隠されているため、どのように達成されたのかはよくわかりません。除外しても削除されませんが、スクリプトでエラーも発生しません。

アップデート:

オプション「ドロップ制約をソースにない」が正しく機能していないようです。一部は削除されますが、制約が削除されないものもあります。red-gate のツールを比較したところ、そこから SQL を取得する方法が見つかりました。Visual Studio のツールでは、テーブルを更新する必要があるとはまったく言われていません。それらはほとんど同じように動作するように見えますが、失敗するテーブルはまったく更新されるべきではないものです (以下をお読みください)

更新 2:

私が見つけたもう1つの問題は、「列の照合を無視する」も正しく機能しないことです。実際の列やデータではなく、列の変更の順​​序であっても、削除されるべきではないテーブルが更新される必要があると言われているためです。これにより、これは何よりもバグレポートのように感じられます。

チェックされている列の照合を無視する

まだ列の照合を表示しています

4

2 に答える 2

1

このような高度なデータ計算に関する私の提案は、Visual Studio を使用しないことです。ロジックを Sql エンジンに配置し、そのためのコードを Sql で記述します。Sql エンジンのマルチ ユーザー ロックの問題により、これらのタイプのプロセスは、ユーザー アクションの間違った組み合わせが同時に発生すると失敗する傾向があります。Visual Studio ツールは、Sql エンジンが変更できるレコードの変更により、データ ロックの問題に対応できません。これが機能するようになったとしても、シングル ユーザー モードでのみ安全に実行できます。

Sql を記述するよりも使いやすいツールですが、この道をたどると信頼性と一貫性に大きなリスクが伴います。

于 2016-09-23T18:37:10.403 に答える
0

これが役立つかどうかはわかりませんが、次のページでこの段落を見つけました: https://msdn.microsoft.com/en-us/library/hh272690(v=vs.103).aspx

この変更には列を NOT NULL から NULL に変更することが含まれ、結果としてデータが失われるため、更新は失敗します。更新を続行する場合は、スキーマ比較のツールバーにある [オプション] ボタン (左から 5 番目) をクリックし、[データ損失の場合は増分展開をブロックする] オプションのチェックを外します。

于 2016-09-13T18:19:52.917 に答える