私は一度似た何かをしなければならなかった、そしてこれに似たような使用して終了:もちろん
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への参照が含まれていることに注意してください。そうではないかもしれないので、関係がない場合はその参照を削除することができます。
出典
2017-02-22 17:11:48
3BK
INFORMATION_SCHEMA.COLUMNSを見ましたか? –