2009-06-01 6 views
0

私は、主にデータベース内の1つのテーブルで使用され、いくつかの異なるテーブルで参照されるデータを持っています。私はデータを修正する必要があります。データベース内のすべてのテーブルを検索し、データが参照されているすべてのテーブルを返す「where-used」ステートメントを記述することは可能ですか?SQLで使用されるステートメント

私はSQL 2005を使用しています。

ありがとうございました。

答えて

1

私は、このSQL文hereを見つけた - 私はそれらをフィルタリングすることは容易であるFK_で始まるすべての外部キー制約に名前を付けます。

+0

これは推移的な参照を処理しますか?TableAは主キー列A1を定義します。 TableBには、A1を参照する外部キー列B1がありますが、(B1、B2)に複合主キーがあります。 TableCは列(C1、C2)に複合外部キーを持っています。A1を参照しているTableCに明示的な外部キー制約はありませんが、ダイアグラムを作成すると、C1列のすべての値もA1列の値である必要があります。これは一般的な問題ではありません。それは避けられたかもしれませんが、それは本当の問題です。 –

0

図をデータベースに追加し、すべての表をその上にドロップしてみます。あなたの質問を正しく解釈したら、すでに存在するデータベーススキーマを理解しようとしていますか?ダイアグラムを使用する場合は、テーブル構造でデータがどこにリンクされているかを見ることができるように、参照を引きます。

SQLでは、ジョインや、異なるテーブルのデータをリンクする条件を使用できます。

「修正する」のは何ですか?

SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint, 
SCHEMA_NAME(schema_id) AS SchemaName, 
OBJECT_NAME(parent_object_id) AS TableName, 
type_desc AS ConstraintType 
FROM sys.objects 
WHERE type_desc LIKE '%CONSTRAINT' 
AND OBJECT_NAME(OBJECT_ID) LIKE 'FK_%' 

注:

+0

私たちは、defsテーブルに2回入力されたディスクリプタです。私はそのうちの1つを削除する必要がありますが、IDはいくつかの異なるデータベースで使用されています。私は、正しいIDをマップし、既存の複製を削除する必要があります。 –

0

Management Studioでは、テーブル/ビュー/ストアドプロシージャを右クリックし、[View Depenencies]を選択できます。依存関係ウィンドウでは、選択した項目が依存するオブジェクトを表示するか、選択した項目に依存する項目を表示するかを選択できます。

0

実際にはできませんが、テーブル設計時には "ON UPDATE CASCADE"との関係を設定できます。

0

外部キーが物理的にデータベースに存在する場合、データベースをリバースエンジニアリングすることができます(これを行うスクリプトについてはthis postingを参照)。これが当てはまらない場合、あなたは手作業による探偵活動をしています。

Visio Professionalには、データベースをリバースエンジニアリングするツールがあります。あなたはどちらかが必要になりますので、2003年には、SQL Server 2005にうまく再生されない:それはスキーマ参照を生成し、にスクリプトをロードしないよう

  • Visio 2007の

  • は、上記にリンクされているスクリプトを変更しますSQL Server 2000データベース。その後、SQL 2000 DBからリバースエンジニアリングを行います。

あなたが外部キーを持っているか、不完全な外部キーのカバレッジを持っていない場合は、手動でそれらを探して(例えば、データを参照するために同様の探しているコードを持つフィールドを探してください)と、手動でキーに注釈を付けることができます図。 FMSをデータベースに戻そうとする可能性があるため、SSMSに付属のダイアグラムツールでこれを実行しないでください。

関連する問題