2009-08-16 14 views
1

非常にうまく設計されていなかった既存のMS SQL Serverデータベースで作業しています。ほとんどの場合、インデックスと主キーが欠落していました。外部キーの制約はありませんでした。SQL Serverスキーマの同期化

DBのローカルコピーを作成しました(ライブバージョンでは機能しないように)。ほとんどの問題を修正しました。私は今、以前の外部キー制約がなかったので、テーブルでキーの不一致、それらの何千ものがある

けど...

、本番サーバーへの私の変化をシンクロします。いくつかの同期ツールを試しましたが、どれもFKの不一致を無視または解決することはできません。 (SQL Server Management Studioでは、「既存のデータを確認して作成または再有効化する:いいえ」と呼ばれます)

古いデータベースの不一致を自動解決する方法はありますか?

答えて

0

あなたは "自動解決" とはどういう意味ですか? 既存のデータが「不良」です。つまり、強制しようとしている制約に違反しています。あなたのデータを変更せずに "良い"ものにする方法はありません。そして、データの修正方法を自動的に決める方法は明らかにありません。

あなたができることは、データを分析し、修正する方法を見つけて、修正を手動で行い、制約を追加することです。 また、不一致の行をすべて削除するだけで(データが必要な場合はおそらく悪い考えです)、サーバーに強制的に既存のデータの制約を強制的に適用させることができます。

あなただけの一貫性のないデータをドロップしたい場合は、私は(foreingキーのそこにいる多くの場合、または生成)の書き込みにあなたをお勧めしたい。このようなSQLスクリプト:

DELETE a FROM a LEFT JOIN b ON a.b_id = b.id WHERE b.id IS NULL 

ALTER TABLE a ADD CONSTRAINT FK_a_b_id FOREIGN KEY (b_id) REFERENCES b (id) 
+0

私が作成したと仮定して矛盾したデータを自動的に削除することは不可能ではありません。 –

+0

SQL Serverではこれを行うことはできません。おそらく、誰かがこれを実装するために気を配っていたかどうかは疑いがありますが、おそらくサードパーティのツールがあります。個人的には、これは非常にまれな使用例であり、プレーンなSQLを使用して達成するのは簡単です。 コード例については、私の答えに編集を参照してください。 – VladV

関連する問題