2

私は、DB2データベースに格納されているERPシステムから情報を引き出すためにSQL Server 2016を使用しています。これには何千ものテーブルがあり、その中にキーはありません。システムからテーブルを取り出すときに、テーブル内の一致する列名を識別できるようにするため、ディメンションを構築するときに関係とキーを作成することができます。今後のリレーショナルIDのために何百ものテーブルの関連する列を見つける

データベースを検索して列名を検索し、その列名を使用するすべてのテーブルを一覧表示するクエリを作成する方法はありますか?私はOPENQUERYINFORMATION_SCHEMA.TABLESを使用して引っ張りたいテーブルを決定しましたが、今ではこれらのテーブル間の関係を判断したいと思っています。

ご協力いただければ幸いです。

+5

INFORMATION_SCHEMA.COLUMNSを見ましたか? –

答えて

1

古い金色のシステムテーブルを見ることができます。 いくつかの例

ID

select so.name, sc.name 
from sys.sysobjects so 
join sys.syscolumns sc on sc.id = so.id 
where so.xtype = N'U' 
and sc.name like 'ID%' 

ような名前の列を持つすべてのテーブルがテーブルからFKS

select so2.name 
from sys.sysobjects so 
join sys.sysforeignkeys fk on so.id = fk.rkeyid 
join sys.sysobjects so2 on fk.fkeyid = so2.id 
where so.name = 'MyTable' 

は、さらに参考のために、あなたが任意の特定の組み合わせをしたい場合は、MSDNのドキュメントをチェック探します新しい質問を投稿するだけです。

0

私は一度似た何かをしなければならなかった、そしてこれに似たような使用して終了:もちろん

SELECT 
    T.name 
    ,C1.name 
    ,C2.Name 
FROM sys.Tables T 
INNER JOIN sys.Columns C1 
    ON C1.object_id = T.object_id 
CROSS APPLY 
    (
    SELECT OBJECT_NAME(CX.object_id) + '.' + CX.Name AS Name 
    FROM sys.Tables TX 
    INNER JOIN sys.Columns CX 
     ON CX.object_id = TX.object_id 
     AND TX.is_ms_shipped = 0 
    WHERE CX.object_id <> T.object_id 
    AND CX.name = C1.name 
    AND CX.user_type_id = C1.user_type_id 
    ) C2 
; 

を、私たちはここに投稿することができます任意のクエリでの問題は、それが非常に一般化するだろうということである、なぜなら私たちはあなたのスキーマに精通していません。名前が異なるので、その結果として場合

T_Customers   T_Shipments 
ID | Name   ID | Customer_ID 
1  | George  1  | 1 
2  | Jane  2  | 1 
3  | John  3  | 3 

T_Shipments.Customer_IDは、T_Customers.IDにリンクする必要がありますが、このクエリではありません:それはあなたがこれらのようなテーブルを持っていること、例えば、完全に可能です。

このようなケースを検索するために、後でクエリを変更して、連結とパターン検索による2番目の比較を行いました。最速ではありませんが、確かに最も徹底的に - 我々はこれまで知らなかったあらゆる種類のものを発見しました。残念ながら、私はあなたのテーブル/属性がもっと詳細なことがたくさんあるように見えるかもしれないものを推測することさえできません。

編集:

CROSS APPLYが、私は同じ名前を持っていたが、異なるデータ型だった列を見つけることで一度に興味がなかったので、user_type_idへの参照が含まれていることに注意してください。そうではないかもしれないので、関係がない場合はその参照を削除することができます。

+0

これは素晴らしい仕事でした、あなたの助けに感謝! – Daniel

関連する問題